Javascript 在jqueryUI自动完成中使用JSON对象
我正在从外部域加载JSON数组。我已经得到了正确的工作,但我仍然有问题,实际上显示任何结果。 使用示例和其他问题/答案,我试图显示明显的结果,但以未捕获的错误结束: 未捕获的TypeError:无法读取未定义的属性“label” 代码段:Javascript 在jqueryUI自动完成中使用JSON对象,javascript,jquery,json,jquery-ui,Javascript,Jquery,Json,Jquery Ui,我正在从外部域加载JSON数组。我已经得到了正确的工作,但我仍然有问题,实际上显示任何结果。 使用示例和其他问题/答案,我试图显示明显的结果,但以未捕获的错误结束: 未捕获的TypeError:无法读取未定义的属性“label” 代码段: $('#citySearchBox').autocomplete({ source: function(request, response){ $.ajax({ url: "/api.php",
$('#citySearchBox').autocomplete({
source: function(request, response){
$.ajax({
url: "/api.php",
data: {action: "search", input: request.term},
dataType: "jsonp"
});
response(function(data){
return $.parseJSON(data);
});
},
minLength: 3
});
调试器中显示的服务器响应:
[{“id”:“1.3.0.0.0.0”,“标签”:“柏林”
(10115)”,“值”:“index.php?action=city&city=1.3.0.0.0.0”},等等……]
正如您所看到的,我试图用所示的方法将字符串解析为JS对象,并且还尝试了JSON.parse(data)
如果我在“回应”部分之前犯了一个错误,但不知何故我成功地把它弄错了,请指出我的错误
编辑:
根据Bradys的建议,我已经更改了代码,但是我似乎在语法上做了一些错误,因为在响应函数中放置了一个断点,什么都不会停止
这是更新的响应函数:
response( function(data){
var items = data.text().slice(1, -1).split(',');
for(i=0; i < (items.length - 3); i=i+3)
{
items[i] = $.parseJSON(items[i]) + ','
+ $.parseJSON(items[i+1]) + ',' + $.parseJSON(items[i+2]);
}
return items;
});
您从服务器获得的不是JSON字符串。这是一个数组。
您应该拆分数组并分别分析每个对象。谢谢您的帮助,我在您的建议后对代码进行了更改,但在编辑中已解释了我的进一步问题。我认为您需要删除第一行并在
数据上运行循环。请注意,上面粘贴的服务器响应周围没有引号。我相信你有一个纯数组。这可能是因为您使用了jsonp
而不是json
。我认为这里不需要jsonp
,它是用于跨域请求的,留给您可执行的JavaScript。有关正确使用jsonp
的更多详细信息,请参见以下问题:谢谢您的帮助。在询问时,我正在跨域工作,但情况发生了变化,所以我摆脱了jsonp,现在一切正常。。。
$('#searchBox').autocomplete({
source: function(request, response){
$.ajax({
type: "GET",
url: "api.php",
async: true,
data: {action: "search", input: request.term},
success: function(data){
var items = $.parseJSON(data);
response(items);
}
});
},
select: function(event, ui){
$('#searchBox').val(ui.item.value);
window.location.href = ui.item.url;
},
minLength: 2
});