2016-10-14 60 views
0

我確實有AJAX請求,並且在成功回調函數中使用了rendergooglelinks,並調用了另一個AJAX調用。Syncronous AJAX停止在錯誤

現在,我嘗試在AJAX請求中使用async:false更改異步調用以同步。

當我做一個AJAX請求時,rendergooglelinks不會呈現由於「未定義」的錯誤和下一個Ajax請求的作品。

在syncronous ajax請求中,進度在rendergooglelinks錯誤後停止。未來的通話不會被觸發。 (即)該錯誤之後的代碼未被處理。

同步ajax請求是否停止出錯?

它是否表現爲「嚴格」模式?

我們該如何處理?

// syncronous request 
$.ajax({ 

    type:"GET", 

    async: false, 

    url: url, 

    success: function(result, status, xhr) { 

     rendergooglelinks(); 

     renderComments(); // this is not called due to error in the above 
    } 

}); 

function rendergooglelinks() 
{ 

    google.test = ''; // returns error 

} 

function renderComments() 
{ 

    // asyncronous request 
    $.ajax({ 

     type:"GET", 

     url: url, 

     success: function(result, status, xhr) { 

     } 
    } 
}); 
+0

這是因爲redergooglelinks AJAX請求是依賴於第一個請求。所以你只需要做異步調用。 –

+0

你可以顯示代碼嗎? –

+0

@ Mr.Duck在問題中添加了代碼。 – Nandakumar

回答

0

根據您發佈的代碼,錯誤是變量google是從未宣佈過,所以google.test不能分配。
另一方面,同步ajax調用不是一個好習慣,如果可能的話避免它們。

最後但並非從jQuery.ajax()文檔持續:

棄用通知:jqXHR.success(),jqXHR.error(),和jqXHR.complete()回調也會被刪除的jQuery 3.0。您可以使用jqXHR.done(),jqXHR.fail()和jqXHR.always()來代替。

對於google變量,我建議你把它作爲參數傳遞給函數,這是危險的,假設它存在不管是什麼。
對於其他錯誤,試試這個:

$.ajax({ 
    type:"GET", 
    //async: false, 
    url: url, 
    /*success: function(result, status, xhr) { 
    rendergooglelinks(); 
    renderComments(); // this is not called due to error in the above 
    }*/ 

}).then([ //success callbacks 
    rendergooglelinks, 
    renderComments 
],[ 
    //no fail callbacks 
]); 

function rendergooglelinks(){ 
    google.test = ''; // returns error 
} 

function renderComments(){ 
    // asyncronous request 
    $.ajax({ 
     type:"GET" 
     url: url, 
     /*success: function(result, status, xhr) { 

     }*/ 
    }).done(function(result, status, xhr){ 
    }); 
} 

又見jQuery Deferred