簡體   English   中英

在javascript中同步運行ajax請求?

[英]Running ajax request in javascript synchronously?

我的代碼有這個問題。 我有一個執行AJAX調用並調出接口的函數,並且AJAX被分離在另一個函數中。 我在某個地方調用它,並跟隨一些代碼。 這是一個例子:

function doAjaxStuff(){
//do something
}

function anotherFunction(){
doAjaxStuff();
//proceed with further code
}

(從$(document).ready調用函數anotherFunction

由於進一步的代碼完全取決於我要加載的內容,例如我正在嘗試訪問一個元素,但尚未加載,這給了我null值,並且沒有任何效果。 因此,如果我可以等到我在anotherFunction調用的函數完全執行后,對我來說將更容易處理。 我看過沒有錯誤的promises有助於使代碼同步(無法理解如何實現)。 幫幫我!

您可以將回調函數作為參數傳遞給doAjaxStuff ,並在ajax請求完成時調用它。

function doAjaxStuff(callback) {
    $.ajax({
        success: function(data) {
            // do some stuff with data
            callback(data);
        }
    });
}

function anotherFunction() {
    doAjaxStuff(function(data) {
        alert(data);
    })
}

在JavaScript中,函數也是對象,這意味着它們可以作為參數傳遞給另一個函數,也可以使用任何其他值來傳遞。 因此,在這種情況下,我們在doAjaxStuff函數中有一個名為callback的參數。 當ajax請求完成時,我們可以調用此作為參數傳遞的函數。

另一種方法是使用deferred對象

function doAjaxStuff(){
  return $.ajax(...);
}


function anotherFunction() {
    $.when(doAjaxStuff()).then(function(){
       // other code to run after ajax call
    });
}

嘗試這樣的事情

      $.ajax({
        url:"demo_test.txt",
        async:false,
        success:function(result){
        }
     });

所有請求都是異步發送的(即默認情況下設置為true)。 如果需要同步請求,請將此選項設置為false

參考

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM