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

问题描述 投票:9回答:2

这是我自动完成的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

我正在使用jquery-ui-1.8.14.autocomplete.min.js插件自动完成我得到的问题是它没有在新浏览器中显示所有匹配的结果。 例如,如果我输入“an” ,其中应与“anzahl”关键字匹配,则火灾错误显示错误,如“字符串中的错误控制字符文字” 。 结果显示字母“as,sa ....”。 任何帮助都会受到赞赏谢谢

php javascript jquery json jquery-ui-autocomplete
2个回答
15
投票

错误消息表示您在JSON响应中有控制字符(类似于\\ n,\\ t等)。 根据ECMA262 5ed,JSON字符串中不允许使用换行符和其他控制字符。 您可以通过从PHP或Javascript中转义或删除这些字符来轻松修复它。

在这里你可以找到一个如何从PHP修复它的例子,因为问题很可能来自json_encode(我假设你正在使用): http//codepad.org/Qu7uPt0E正如你所看到的,json_encode没有' t转义\\ n所以你必须在输出前手动完成。

现在为与旧浏览器相关的谜题。 如果你看一下jQuery的parseJSON函数,你会注意到它首先尝试用浏览器的内置JSON对象解析字符串,如果它找不到,它只会做一个(某种)eval(即使是新行)。 因此它可能适用于Firefox <3.5或IE <8,它们没有本机JSON对象。 此外,它可能与其他搜索术语(如as等)一起使用仅仅因为它们不包含具有控制字符的结果。


0
投票

添加到drajors正确的答案。

看看下载JSON2库https://github.com/douglascrockford/JSON-js这就是我解决这个问题的方法

© www.soinside.com 2019 - 2024. All rights reserved.