在继续使用脚本之前等待AJAX​​响应

时间:2016-06-28 09:18:36

标签: javascript jquery ajax

我有一个运行2个AJAX调用的脚本,第一个检查数据库中是否存在记录。如果确实如此,则不应该继续,脚本应该停止。第二个提交工作。

我的问题是在第一次AJAX调用返回之前提交了作业。我的代码看起来像这样:

if (recordid) {
    var request = $.ajax({
        context: document.body,
        url: URLGOESHERE,
        data: {
            recordID: recordid
        },
        success: function( data ){
            if (data.Response == "Success") {
                var noresults = data.Results;
                if (noresults > 0){
                    alert('this record id already exists!');
                    return false;
                }
            } else {
                alert('an error occured');
                return false;
            }
        }
    });
} else {
    alert('enter a record id');
    return false;
}   

// second ajax call goes here, which gets called regardless of the output of the ajax call above    

4 个答案:

答案 0 :(得分:1)

不要将调用放在代码底部的第二个ajax方法(当前注释的位置),而是将其置于第一次调用的“成功”功能中。此方法仅在第一次调用完成后执行。这是确保第二次调用不会过早发生的唯一方法。 Ajax调用是异步运行的,因此浏览器的正常流程不会中断。这是故意的,因此长时间运行的调用不会锁定用户的浏览器。

答案 1 :(得分:0)

if (recordid) {
    var request = $.ajax({
        context: document.body,
        url: URLGOESHERE,
        data: {
            recordID: recordid
        },
        success: function(data) {

            //check here if you want to call submitJob or not
            //and call submitJob()
        }

    });

} else {
    alert('enter a record id');
    return false;
}

//call this ajax once you varified your condition from success callback of first one
function submitJob() {

    //second ajax call goes here
}

答案 2 :(得分:0)

试试这个:make async propety false

if (recordid) {
    var request = $.ajax({
        context: document.body,
        url: URLGOESHERE,
        data: {
            recordID: recordid
        },
        async : false, //added this
        success: function( data ){
            if (data.Response == "Success") {
                var noresults = data.Results;
                if (noresults > 0){
                    alert('this record id already exists!');
                    return false;
                }
            } else {
                alert('an error occured');
                return false;
            }
        }
    });
} else {
    alert('enter a record id');
    return false;
}  

OR 在第一个ajax调用的成功函数中执行第二个ajax调用,即参见注释

if (recordid) {
        var request = $.ajax({
            context: document.body,
            url: URLGOESHERE,
            data: {
                recordID: recordid
            },
            success: function( data ){
                if (data.Response == "Success") {
                    var noresults = data.Results;
                    if (noresults > 0){
                        alert('this record id already exists!');
                        return false;
                    }
                    //perform 2nd ajax call here
                } else {
                    alert('an error occured');
                    return false;
                }
            }
        });
    } else {
        alert('enter a record id');
        return false;
    }  

答案 3 :(得分:0)

你必须使用jquery promise函数来等待第一个ajax请求完成然后再发出另一个ajax请求。

<强> JQUERY PROMISE

将第二个ajax请求放入第一个success function中,并在您希望触发时将其发生

 if (recordid) {
    var request = $.ajax({
    context: document.body,
    url: URLGOESHERE,
    data: {
        recordID: recordid
    },
    success: function(data) {

        //check here if you want to call submitJob or not
        if (noresults > 0){ return false }
        else { Job(); };

    }

   });

  } else {
     alert('enter a record id');
     return false;
   }

      function Job() {
             //another ajax call.
       }

希望有所帮助:)