$ .get()加载两次

时间:2013-04-06 07:40:46

标签: jquery

我似乎陷入了死胡同。

我尝试使用jQuery .get()加载数据,但在调试时,它显示函数执行了两次,因此prodList的值丢失了。

$.get(url, function (model) {
    prodList = $.parseJSON(model);
    alert(prodList);
});

alert(prodList);

在第一个alert()中,它显示从服务器返回的数据。但在第二个alert()中,它显示空字符串。

我做错了什么?

2 个答案:

答案 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
});