JavaScript全局不保留作用域?创建自动完成webservice json对象
您好,我正在尝试自动完成一个城市列表,但是返回的json对象的格式不适合在自动完成中使用,它需要一个名为“label”:“cityname”的字段来显示自动完成,因此我尝试使用ajax调用重新格式化json对象并将其写入全局变量,问题是一旦ajax调用返回,我的jsData[]是一个空数组。。。我做错了什么?为什么全局变量不保留一个值JavaScript全局不保留作用域?创建自动完成webservice json对象,javascript,jquery,json,web-services,Javascript,Jquery,Json,Web Services,您好,我正在尝试自动完成一个城市列表,但是返回的json对象的格式不适合在自动完成中使用,它需要一个名为“label”:“cityname”的字段来显示自动完成,因此我尝试使用ajax调用重新格式化json对象并将其写入全局变量,问题是一旦ajax调用返回,我的jsData[]是一个空数组。。。我做错了什么?为什么全局变量不保留一个值 $(“nec”).bind(“pageshow”,函数(e){ var jsData=[]; $.ajax({ url:“http://localhost:8
$(“nec”).bind(“pageshow”,函数(e){
var jsData=[];
$.ajax({
url:“http://localhost:8084/REST/resources/cities",
数据:{},
键入:“GET”,
跨域:是的,
数据类型:“jsonp”,
jsonp:'jsonp',
JSONPCCallback:'jsoncallback',
错误:函数(错误){
console.log(错误);
},
成功:功能(结果){
对于(i=0;i
我对JS有点陌生,所以有一些事情我还没有掌握问题是,
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
});
var jsData=[];//在这里做。
$(“nec”).bind(“pageshow”,函数(e){
$.ajax({
url:“http://localhost:8084/REST/resources/cities",
数据:{},
键入:“GET”,
跨域:是的,
数据类型:“jsonp”,
jsonp:'jsonp',
JSONPCCallback:'jsoncallback',
错误:函数(错误){
console.log(错误);
},
成功:功能(结果){
对于(i=0;i
虽然,我不建议使用全局变量。但是,如果它对您有效,这是您的愿望。您必须将
$("#textinput").autocomplete({
target: $('#suggestions'),
source: jsData,
minLength: 1
});
在success()函数中
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
});
因为,jsData
在success()
中变为update。执行pageshow
事件的匿名函数比执行success()
要快。因此,在该函数中,jsData
保持为空
您可以通过自动完成本身检索数据。我也尝试过,复制粘贴实际上是我第十次尝试使其工作。这导致jsDAta为[]同样的。嗯,我实际上又试了一次,这次成功了,所以它似乎有一个不一致的行为…嗯…我会尝试一下,我实际上试着做相反的事情,将ajax调用添加到source:的autocomplete作为回调,但没有成功。有没有更简单的解决方案来获取json对象并格式化它?这是一个巨大的问题f代码来完成这样一个简单的任务。@thecodeparadox不幸的是,它不是同一个自动完成。这个自动完成是针对jquery mobile的,作为最后的手段,我可能会使用jquery ui,但我不想仅仅为了自动完成而将jQ ui添加到项目中。