簡體   English   中英

Jquery中有async:false的替代方法嗎?

[英]Is there an alternative to async:false in Jquery?

我不贊成在主線程上使用Synchronous XMLHttpRequest,因為它對最終用戶的體驗有不利影響。 我已經看過這篇文章,但找不到適合我需要的任何內容。

異步的替代:錯誤的ajax

$(docucment).ready(function(){

var obj=AppendFileList(10); 
 $.each(obj.Table, function (key, value) {
             //some code to do some task                                           
   });

});




function AppendFileList(lotid) {

                $.ajax({
                    type: "POST",
                    url: "XYZ/GetAttachements",
                    data: JSON.stringify({ LotId: lotid, GUID: $('#hidnuniqueid').val() }), // LotId: arr1[1],
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    async: false,
                    success: function (data, status) {
                        var obj = jQuery.parseJSON(data.d);
                        console.log(obj);
                        return obj;

                    },
                    failure: function (data) {
                        console.log(data);

                    },
                    error: function (data) {
                        console.log(data);
                        console.log(data.Message);
                    }
                });

            }

我不想像我的示例所示將ajax()方法放在單獨的函數中,這樣我就不必一次又一次編寫ajax調用。 這可能嗎?

依賴於AJAX請求結果的所有邏輯都應放入success回調中。 為此,您可以將匿名函數傳遞給AppendFileList()函數。 嘗試這個:

$(document).ready(function(){
    AppendFileList(10, function(data) { // data = the JSON retrieved
        $.each(obj.Table, function (key, value) {
            // some code to do some task                                           
        });
    }); 
});

function AppendFileList(lotid, callbackFn) {
    $.ajax({
        type: "POST",
        url: "XYZ/GetAttachements",
        data: { 
            LotId: lotid, 
            GUID: $('#hidnuniqueid').val() 
        },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data, status) {
            callbackFn(data); // use your callback here, passing it the retrieved data
        },
        error: function (data) {
            console.log(data);
            console.log(data.Message);
        }
    });
}

請注意,您不需要使用JSON.stringify發送data或反序列化響應,因為jQuery會自動為您執行此操作,並且$.ajax()方法在其設置中沒有failure屬性。

暫無
暫無

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

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