[英]JavaScript global not keeping scope? creating an autocomplete webservice json object
您好我正在尝试自动填充城市列表,但返回的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方面有点新鲜,所以还有一些我还没有掌握的东西
你必须把
$("#textinput").autocomplete({
target: $('#suggestions'),
source: jsData,
minLength: 1
});
在你的success()
函数中。
因为, jsData
在success()
内成为更新。 执行pageshow
事件的匿名函数比执行success()
更快。 因此,在该函数中, jsData
保持为空。
您可以通过自动填充本身检索数据。 看这里
问题是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
});
虽然,我不建议全球变量。 但是,如果它对你有用,那就是你的愿望。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.