2011-06-05 41 views
8

我正在写一个小脚本,通过一个循环使得单个的AJAX调用,我遇到了一个最可能是显而易见的问题。看起来,循环将快速处理使用ajax接收的数据,导致它仅加载循环中的最后一段数据。我添加了一个警告框,可以逐步完成迭代并加载数据,但在用户环境中这不太实际。该代码只是一个jQuery的.post()在for循环内的回调。我可以根据要求发布代码,但我觉得这可以通过口头方式清除。任何人都知道一种解决方法或更好的方法来按顺序加载数据?谢谢。Syncronous JQuery.post()

编辑

是否.ajaxSetup()修改.post()?也许我可以用它来改变异步值。员额()..

+2

阿贾克斯顾名思义就是异步) – Jakub 2011-06-05 17:28:00

+3

也许你可以尝试把异步:假在你的Ajax调用选项。这样做会将每个ajax请求放入队列中,直到它们被顺序执行。 – sadmicrowave 2011-06-05 17:28:20

+0

我会试一试 – 2011-06-05 17:29:00

回答

4

我居然发现,添加这段代码工作,所以我没有改变我。员额()来阿贾克斯()

$.ajaxSetup({ async: false });

我不知道这是否也将改变我的其他阿贾克斯调用的设置

+0

只是把在Ajax调用是在你的for循环 '片断',这样它不会改变你的其他ajax调用的执行方式。我将发布一个答案,显示我的意思...... – sadmicrowave 2011-06-05 18:03:59

+0

没有理由不应该能够在循环中发送异步请求。我怀疑你有某种上下文问题,所以所有的成功函数都在更新相同的元素或其他东西。如果你发布你的代码,它可能会提供一个更好的主意。在循环中发送同步请求会挂起浏览器,直到完成所有请求。 – 2011-06-05 18:08:26

+0

@kingjiv这完全正确。成功函数填充表格。 – 2011-06-05 18:18:08

5

你需要强迫你的Ajax调用是同步我的朋友;)

http://api.jquery.com/jQuery.ajax/

例如:

asyncBoolean 默认:true

默认情况下,所有的请求都异步发送(即这是默认情况下将设置为true t)。如果您需要同步请求,请将此选项设置为false。跨域请求和dataType:“jsonp”请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作。

0

如果您使用async: false您应该能够将每个ajax调用放入队列中,直到它们以同步方法执行为止。像这样:

for(var i=0;i < x;i++){ 
    $.ajax({url: 'myurl', 
      async: false, 
      success: function(data){ 
         //do something with the returned 'data' 
         }; 
    }); 
} 
0
function myFunction() { 
    var x; 
for(var i=0;i<10;i++){ 
    if (confirm("Press a button!") == true) { 
     x = "You pressed OK!"; 
    } else { 
     x = "You pressed Cancel!"; 
    } 
    document.getElementById("demo").innerHTML = x; 
} 
} 

    enter code here