【问题标题】:jquery Autocomplete working with older versions of the browsers but not new ones?jquery Autocomplete 适用于旧版本的浏览器但不是新版本的浏览器?
【发布时间】:2011-11-30 14:09:30
【问题描述】:

这是我的自动完成的 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" 关键字匹配,则火灾错误会显示错误,例如 "bad control character literal in a字符串”。结果显示字母“as,sa....”。任何帮助都会得到帮助 谢谢

【问题讨论】:

  • 如果它适用于其他组合“as”和“sa”,我建议仔细查看您的 JSON 响应与“an”相比的差异。您可以通过按 Ctrl + Shift + I 并选择“网络”选项卡在 Chrome 中查看响应。然后当您的代码运行脚本时,您可以看到响应。
  • @Luke Coulton 它也像其他人一样给出响应号:200,但未在下拉列表中显示结果。
  • 检查每个响应返回的实际“json”。 Chrome 开发者工具的网络区域中有一个“json”标签。
  • 带有您发布的数据的自动完成小部件。也许它与您键入特定字符(如“as”和“sa”)时返回的数据有关。
  • 它适用于哪些浏览器,哪些浏览器不适合您?

标签: php javascript jquery json jquery-ui-autocomplete


【解决方案1】:

添加正确答案。

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

【讨论】:

    【解决方案2】:

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

    在这里您可以找到如何从 PHP 修复它的示例,因为问题很可能来自 json_encode(我假设您正在使用):http://codepad.org/Qu7uPt0E 如您所见,json_encode 不会转义 \n,因此您必须在输出之前手动进行。

    现在是与旧浏览器相关的谜团。如果您查看 jQuery 的 parseJSON 函数,您会注意到它首先尝试使用浏览器的内置 JSON 对象解析字符串,如果找不到,它只会执行(某种)eval(即使使用换行符)。所以它可能适用于没有原生 JSON 对象的 Firefox

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 2017-01-01
      • 2012-03-04
      • 2019-05-23
      • 2018-09-14
      • 1970-01-01
      • 2020-02-02
      相关资源
      最近更新 更多