您好,我正在尝试自动完成城市列表,但返回的 json 对象未格式化为用于自动完成,需要一个名为“label”:“cityname”的字段来显示自动完成,因此我正在尝试重新格式化我使用 ajax 调用将 package.json 对象写入全局变量,问题是,一旦 ajax 调用返回,我的 jsData 是 [] 一个空数组...我做错了什么?为什么全局变量不保留值?
http://www.andymatthews.net/read/2012/03/27/jQuery-Mobile-Autocomplete-now-available
<script>
$("#nec").bind("pageshow", function(e) {
var jsData = [];
$.ajax({
url: "http://localhost:8084/REST/resources/cities",
data:{},
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
jsonp: 'jsonp',
jsonpCallback: 'jsoncallback',
error: function(error){
console.log(error);
},
success: function(result) {
for (i = 0; i < result.length; i++){
jsData.push({label:result[i].name, value:result[i]});
}
console.log(JSON.stringify(jsData));
},
});
$("#textinput").autocomplete({
target: $('#suggestions'),
source: jsData,
minLength: 1
});
});
</script>
我对 JS 有点陌生,所以有一些东西我还没有掌握
最佳答案
你必须输入
$("#textinput").autocomplete({
target: $('#suggestions'),
source: jsData,
minLength: 1
});
在您的 success()
函数中。
因为,jsData
会在 success()
内更新。 pageshow
事件的匿名函数的执行速度比 success()
的执行速度更快。因此,在该函数中 jsData
保持为空。
您可以通过自动完成本身检索数据。 See here
关于JavaScript 全局不保持作用域?创建自动完成 Web 服务 json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10666410/