Javascript jQuery UI自动完成的JSON数组
任务是获取带有城市名称数组的本地JSON文件,并将其置于自动完成状态。没有关于JSON数组的确切信息,总是谈论成对的“键”-“值”。所以我有一个问题:在JSON中是否可以使用带有单个项的数组?如果可以,我的代码的错误在哪里?Javascript jQuery UI自动完成的JSON数组,javascript,jquery,json,autocomplete,Javascript,Jquery,Json,Autocomplete,任务是获取带有城市名称数组的本地JSON文件,并将其置于自动完成状态。没有关于JSON数组的确切信息,总是谈论成对的“键”-“值”。所以我有一个问题:在JSON中是否可以使用带有单个项的数组?如果可以,我的代码的错误在哪里? JSON [ "Minsk", "London", "Riga", "Vilnius", "Warszaw", "Paris", "Moscow", "Tallin", "Berlin",
JSON
[
"Minsk",
"London",
"Riga",
"Vilnius",
"Warszaw",
"Paris",
"Moscow",
"Tallin",
"Berlin",
"Amsterdam",
"Oslo",
"Helsinki"
]
$('#tags').autocomplete({
source: function(request, response) {
var result = $.ajax({
url: '../source.json',
method: 'GET',
dataType: 'json',
success: function(data) {
var array = [];
response($.each( data, function(item) {
array.push(item);
return array;
}));
return array;
}
});
}
});
JS
[
"Minsk",
"London",
"Riga",
"Vilnius",
"Warszaw",
"Paris",
"Moscow",
"Tallin",
"Berlin",
"Amsterdam",
"Oslo",
"Helsinki"
]
$('#tags').autocomplete({
source: function(request, response) {
var result = $.ajax({
url: '../source.json',
method: 'GET',
dataType: 'json',
success: function(data) {
var array = [];
response($.each( data, function(item) {
array.push(item);
return array;
}));
return array;
}
});
}
});
JSON支持数组和对象 您的代码不会将结果返回到源代码。事实上,如果不使用
setInterval
来检查它或类似的东西,就不能等待$.ajax()完成。最好的方法是在页面加载时访问JSON文件一次,并从那里引用源代码
尝试:
var dict=[];
$.ajax({
网址:'https://dl.dropboxusercontent.com/u/100496307/source.json',
方法:“GET”,
数据类型:“json”,
成功:功能(数据){
$.each(数据,函数(){
dict.push(this.toString());
});
返回命令;
}
});
$(“#标记”)。自动完成({
资料来源:dict
});
$(“#标记”).keydown(函数(){
控制台日志(dict);
});代码>
您可以发布javascript错误是什么吗?您可以在浏览器开发工具中查看控制台。最糟糕的是没有错误,我会尝试导航到source.json
文件。如果可行,请将。/source.json
设置为绝对路径,然后查看AJAX调用是否可行。在success函数中,我会放入一个console.log(data)
语句,这样您就可以看到从URL返回的内容。“本地JSON文件”-如果您正在加载/试图直接从您的计算机读取文件(即使用文件://
),这不太可能起作用。一旦您超越了基本开发,您通常需要像服务文件一样服务文件webserver@Mark我添加了绝对路径,成功函数不起作用:消息是数据未定义我已更改了文件JSON的位置并尝试了您的解决方案-没有任何反应([JSON now is here]()修复了。请尝试该代码段。谢谢!它可以工作!为autocomplete编辑json时出错,对吗?请解释行“complete=true;”是什么意思,以及为什么要编写“(function(){return dict;}”)而不是“function(){return dict;}”?错误是您试图使用的源数组还不存在(它必须用AJAX抓住它)。如果AJAX未加载,当前代码将使用空数组,但如果已加载,则将使用AJAX数组。已完成
是早期尝试的结果。现在将其删除。我使用函数调用是因为我认为它不会在每次键入时动态抓取dict,并且只使用您第一次绑定时的dict值。autocomplete()
,但我刚刚测试了它,这是错误的。我也将删除它。很好的捕获。