Php jquery自动完成使用旧版本的浏览器而不是新版本的浏览器?

Php jquery自动完成使用旧版本的浏览器而不是新版本的浏览器?,php,javascript,jquery,json,jquery-ui-autocomplete,Php,Javascript,Jquery,Json,Jquery Ui Autocomplete,下面是我的自动完成的JSON数据 { "list" : [ { "genericIndicatorId" : 100, "isActive" : false, "maxValue" : null, "minValue" : null, "modificationDate" : 1283904000000, "monotone" : 1, "name":"Abbau", "old_name" : "abbau_change_delet

下面是我的自动完成的JSON数据

{ "list" : [ {
    "genericIndicatorId" : 100,
    "isActive" : false,
    "maxValue" : null,
    "minValue" : null,
    "modificationDate" : 1283904000000,
    "monotone" : 1,
    "name":"Abbau",
    "old_name" : "abbau_change_delete_imac",
    "position" : 2,
    "systemGraphics" : "000000",
    "unitId" : 1,
    "valueType" : 1,
    "description" : "Abbau",
    "weight" : 1
}]}
我写的代码是

$("#<portlet:namespace />giName").autocomplete({
            source :`enter code here` function( request, response ) {
                $.post(
                    "<%=AJAXgetGIs%>",
                    {
                        "<%=Constants.INDICATOR_NAME%>" : request.term,
                        "<%=Constants.SERVICE_ID%>" : <%=serviceId%>
                    },
                    function( data ) {
                        response( $.map( data.list, function( item ) {
                                //alert(item.name + " || " + item.genericIndicatorId);
                                item.value = item.name;
                            return item;
                        }));
                    },
                    "json"
                );
            },
            minLength : 2
$(“#giName”).autocomplete({
来源:`enter code here`函数(请求、响应){
美元邮政(
"",
{
“”:request.term,
"" : 
},
功能(数据){
响应($.map(data.list,函数(项)){
//警报(item.name+“| |”+item.genericIndicatorId);
item.value=item.name;
退货项目;
}));
},
“json”
);
},
最小长度:2
我正在使用jquery-ui-1.8.14.autocomplete.min.js插件进行自动完成 我遇到的问题是,它没有在新浏览器中显示所有匹配的结果。 例如,如果我键入一个“”应该与“”anzahl“关键字匹配的“”,则fire bug会显示错误,如“”字符串中的错误控制字符文字“”。结果显示为字母“as,sa…”。任何帮助都将被告知
谢谢

错误消息意味着您的JSON响应中有控制字符(如\n、\t等)。根据ECMA262 5ed,JSON字符串中不允许使用换行符和其他控制字符。您可以通过从PHP或Javascript转义或删除这些字符来轻松修复此问题

在这里,您可以找到一个如何从PHP修复它的示例,因为问题很可能来自json_encode(我假设您正在使用它): 正如您所看到的,json_encode不会逃逸\n,因此您必须在输出之前手动执行

现在来看与旧浏览器相关的错误。如果您查看jQuery的parseJSON函数,您会注意到它首先尝试使用浏览器的内置JSON对象解析字符串,如果找不到任何字符串,它只会执行(某种)eval(即使在换行符中也可以使用)。因此,它可能适用于Firefox<3.5或IE<8上没有本机JSON对象的用户。
此外,它可能与其他搜索词(如as等)一起使用,因为它们不包含具有控制字符的结果。

添加到draevors的正确答案

看看下载JSON2库
这就是我如何解决这个问题的方法

如果它在其他组合“as”和“sa”中运行良好,我建议您仔细查看JSON响应与“an”的区别。您可以在Chrome中按Ctrl+Shift+i并选择“Network”选项卡来查看响应。然后,当您的代码运行脚本时,您可以看到响应onse.@Luke Coulton它也会像其他人一样给出第200号响应,但不会在下拉列表中显示结果。检查每个响应返回的实际“json”。Chrome Developer tools的网络区域中有一个“json”选项卡。带有您发布的数据的“自动完成”小部件。可能与此有关当您键入特定字符(如“as”和“sa”)时返回的数据。在哪些浏览器中它对您有效,在哪些浏览器中不适用?