2016-06-28 89 views
0

我有一個運行2個AJAX調用的腳本,這是第一次檢查數據庫中是否存在記錄。如果是這樣,則不應該繼續,腳本應該停止。第二個提交工作。在繼續使用腳本之前等待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  
+0

這是因爲請求是異步的。將第二個AJAX調用*放入第一個調用的'success'處理程序中。還要注意,在'success'處理程序中使用'return'是多餘的。 –

+0

爲你的'$ .ajax'添加參數'async:false',或者,更好的辦法是將第二個請求放在'success'回調中。 – eisbehr

+0

@eisbehr不,永遠不要這樣做。 'async:false'是*難以置信的*糟糕的做法。當請求正在進行時,它會阻止UI線程表單更新,這使得它看起來像瀏覽器崩潰了。這是大多數瀏覽器現在拋出關於其使用的控制檯警告的原因。 –

回答

1

而不是把呼叫轉移到第二AJAX方法在你的代碼(在評論當前的)的底部,把它放在你的第一個電話的「成功」功能。這個方法只會在第一次調用完成後執行。這是確保第二次通話不會發生得太早的唯一方法。 Ajax調用異步運行,因此瀏覽器的正常流程不會中斷。這是故意的,以便長時間運行的調用不會鎖定用戶的瀏覽器。

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 
} 
0

嘗試這個辦法:異步歡迎使用屬性假

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; 
    } 
+1

千萬不要使用'async:false',這是非常糟糕的做法。當請求正在進行時,它會阻止UI線程表單更新,這使得它看起來像瀏覽器崩潰了。這是大多數瀏覽器現在拋出關於其使用的控制檯警告的原因。 –

+0

所以@ Dr.Avalanche可以在第一個ajax調用的成功函數中調用第二個ajax調用 –

0

你必須使用jquery promise功能爲了等待第一個Ajax請求完成,然後再發出一個Ajax請求。

JQUERY PROMISE

OR

將在第一個的success function第二ajax要求,使當你想它開火

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. 
     } 

希望它可以幫助它發生:)

相關問題