您好我正在尝试自动填充城市列表,但是返回的json对象没有格式化用于自动完成,需要一个名为“label”的字段:“cityname”来显示自动完成,所以我试图重新格式化json对象使用ajax调用并将其写入全局变量,问题是一旦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方面有点新鲜,所以还有一些我还没有完成的事情
答案 0 :(得分:2)
你必须把
$("#textinput").autocomplete({
target: $('#suggestions'),
source: jsData,
minLength: 1
});
在success()
函数中。
因为,jsData
会在success()
内更新。执行pageshow
事件的匿名函数比执行success()
更快。因此,在该函数中jsData
保持为空。
您可以通过自动填充功能检索数据。 See here
答案 1 :(得分:0)
问题是jsData
不是全局的,而是作用于匿名函数。
var jsData = []; // make that here.
$("#nec").bind("pageshow", function(e) {
$.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
});
虽然,我不建议全局变量。但是,如果它适合你,那就是你的愿望。