这是我自动完成的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 ....”。任何帮助都会得到满足 谢谢
答案 0 :(得分:15)
错误消息表示您在JSON响应中有控制字符(类似于\ n,\ t等)。根据ECMA262 5ed,JSON字符串中不允许使用换行符和其他控制字符。您可以通过从PHP或Javascript中转义或删除这些字符来轻松修复它。
在这里你可以找到一个如何从PHP修复它的例子,因为问题最有可能来自json_encode(我假设你正在使用):http://codepad.org/Qu7uPt0E 如您所见,json_encode不会转义\ n因此您必须在输出之前手动执行此操作。
现在有关旧浏览器的谜题。如果你看一下jQuery的parseJSON函数,你会注意到它首先尝试用浏览器的内置JSON对象解析字符串,如果它找不到,它只会做一个(某种)eval(即使是新行)。所以它可能适用于Firefox&lt; 3.5或IE&lt; 8没有本机JSON对象。 此外,它可能只与其他搜索术语(如as等)一起使用,因为它们不包含具有控制字符的结果。
答案 1 :(得分:0)
添加drajors正确答案。
看下载JSON2库 https://github.com/douglascrockford/JSON-js 这就是我解决这个问题的方法