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

Is there an alternative to async:false in Jquery?

本文关键字:方法 false 是否 async Jquery      更新时间:2023-09-26

我得到同步XMLHttpRequest在主线程是不赞成的,因为它对最终用户的体验有害的影响。我已经看了这个帖子,但找不到任何适合我需要的东西。

async: false 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属性。