jQuery.ajax()顺序调用

时间:2011-03-31 00:28:34

标签: ajax jquery

嘿。我需要一些jQuery Ajax调用的帮助。在javascript中,我必须对控制器进行ajax调用,该控制器从模型中检索一个值。然后我检查返回的值并在必要时进行进一步的ajax调用,比如如果值达到特定阈值,我可以停止ajax调用。

这需要一个接一个地进行处理的ajax调用。我尝试使用async:false,但它冻结了浏览器,我在前端进行的任何jQuery更改都没有反映出来。有没有办法解决这个问题?

提前致谢。

5 个答案:

答案 0 :(得分:5)

你应该在第一个完成后调用下一个ajax调用,例如:

function getResult(value) {
    $.ajax({
        url: 'server/url',
        data: { value: value },
        success: function(data) {
            getResult(data.newValue);
        }
    });
}

答案 1 :(得分:1)

success回调函数中,如有必要,只需提出另一个$.ajax请求。 (设置async: false会导致浏览器将请求作为与其他所有内容相同的线程运行;这就是它冻结的原因。)

答案 2 :(得分:1)

使用回调函数,有两个:successerror

来自jQuery ajax页面:

$.ajax({
  url: "test.html",
  context: document.body,
  success: function(){
    // Do processing, call function for next ajax
  }
});

一个(非常)简化的例子:

function doAjax() {

    // get url and parameters
    var myurl = /* somethingsomething */;

    $.ajax({
        url: myurl,
        context: document.body,
        success: function(data){
             if(data < threshold) {
                  doAjax();
             }
        }
    });
}

答案 3 :(得分:1)

尝试使用$.when()(1.5以后可用),您可以拥有一个回调,一旦所有调用都会触发,它更干净,更优雅。最终看起来像这样:

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1,  a2){
// a1 and a2 are arguments resolved for the page1 and page2 ajax requests, respectively
    var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
   alert( jqXHR.responseText )
});

答案 4 :(得分:1)

我使用了一系列步骤和回调函数来继续执行async启动的地方。适合我。

var tasks = [];

for(i=0;i<20;i++){
    tasks.push(i); //can be replaced with list of steps, url and so on
}

var current = 0;

function doAjax(callback) {

    //check to make sure there are more requests to make
    if (current < tasks.length -1 ) {

        var uploadURL ="http://localhost/someSequentialToDo";
        //and 
        var myData = tasks[current];

        current++;

        //make the AJAX request with the given data 
        $.ajax({
            type:     'GET',
            url      : uploadURL,
            data: {index: current},
            dataType : 'json',
            success  : function (serverResponse) {
                doAjax(callback);
            }
        });
    }
    else
    {
        callback();
        console.log("this is end");
    }
}

function sth(){
    var datum = Date();

    doAjax( function(){
        console.log(datum); //displays time when ajax started
        console.log(Date()); //when ajax finished
    });

}
console.log("start");
sth();