我似乎陷入了死胡同。
我尝试使用jQuery .get()
加载数据,但在调试时,它显示函数执行了两次,因此prodList
的值丢失了。
$.get(url, function (model) {
prodList = $.parseJSON(model);
alert(prodList);
});
alert(prodList);
在第一个alert()
中,它显示从服务器返回的数据。但在第二个alert()
中,它显示空字符串。
我做错了什么?
答案 0 :(得分:5)
您显示的代码并未表明执行存在任何问题。
关于值的警报。
$.get()
是一个异步执行,意味着在.get()
启动后代码执行仍在继续。
在.get()
完成之前,您指定的回调函数将不会执行,但其余代码将持续到那时为止。
因此,第一个警报会显示执行回调之前的值,因此尚未填充prodList
。
然后在回调函数中填充值后显示第二个警报。
$.get(url, function (model) {
prodList = $.parseJSON(model);
alert(prodList); // prodList is now populated
});
alert(prodList); // prodList here is alerted before it is populated
如果你想对prodList
做一些事情,你要么在回调函数本身中使用它,要么从回调函数中调用另一个函数,传递prodList
作为参数来处理它。
答案 1 :(得分:0)
你得到空值,因为:
在获取之后使用 prodlist
async: false
基本上,您需要确保首先使用的值始终在第二次调用之前发生。
所以尽量不要使用速记功能。
你可以使用这个,很多人都避免使用Sync Ajax,但根据具体情况可能会有一些例外:
$.ajax({
url: url,
data: data,
success: success,
dataType: dataType,
async: false
});