同步JQuery.post()

时间:2011-06-05 17:24:03

标签: javascript jquery ajax synchronization

我正在编写一个小脚本,通过循环调用各个AJAX,我遇到了一个很可能很明显的问题。似乎循环将快速处理用ajax接收的数据,导致它只加载循环中的最后一段数据。我添加了一个警报框,它可以逐步完成迭代并加载数据,但在用户环境中却不实用。代码只是一个jquery .post(),在for循环中有一个回调。我可以根据要求发布代码,但我觉得这可以通过口头清除。任何人都知道一种变通方法或更好的方法来顺序加载数据?感谢。

修改

.ajaxSetup()会修改.post()吗?也许我可以用它来改变.post()的异步值。

4 个答案:

答案 0 :(得分:5)

你需要强制你的ajax调用与我的朋友同步;)

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

例如:

<强> asyncBoolean 默认值:true

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

答案 1 :(得分:4)

我实际上发现添加这个代码段是有效的,所以我没有必要将.post()更改为.ajax()

$.ajaxSetup({ async: false });

我不确定它是否也会改变我的其他ajax调用的设置

答案 2 :(得分: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'
                      };
    });
 }

答案 3 :(得分: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