jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了避免在jQuery中使用async:false的策略?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
jQuery docs强烈建议您在执行$.ajax请求时不要将async设置为false.

但是,我看到常见的solutions同步性问题涉及到这样做.然后我看到人们因为反对文档的推荐而被chastised.

如此,我试图使用promise来避免使用async:false而没有运气.

这是我正在使用的代码.我有一个调用addToOrder的onclick事件:

function saveTemplate() {
    var formData = getFormData();
    return $.ajax({
        type: "POST",url: "/p/session/save/" + sessionid + "/template/<?PHP echo $templatEID ?>/",data: formData,async: true,success: function(msg){
            var rsp = $.parseJSON(msg);
            if (rsp.response === 'Saved') {
                sessionid = rsp.sessionid;
                $("#save-preview-data-response").html("&nbsp;&nbsp;&nbsp;" + rsp.responsE).fadeIn(100).delay(1000).fadeOut(1000);
            } else {
                $("#save-preview-data-response").css('color','#ff0000').html("&nbsp;&nbsp;&nbsp;" + rsp.responsE).fadeIn(100).delay(1000).fadeOut(1000);
            }
        }
    });
}

function addToOrder() {
    var saved = saveTemplate();
    var issaved;
    saved.success(function(E) {
        var rsp = $.parseJSON(E);
        issaved = (rsp.response == 'Saved') ? true : false;
    });
    if(issaved) {
        $.ajax({
            type: "POST",url: "<?PHP echo $baseURL; ?>addToOrder/respond/json",data: "sid=" + sessionid,success: function(msg){
                var rsp = $.parseJSON(msg);
                if (rsp.response === 'Saved') {
                    alert(msg);
                }
            }
        });
    }
}@H_772_14@ 
 

issaved将始终评估为false,因为在saveTemplate有时间运行之前正在评估它.我找到的唯一解决方案是设置async:false但是我正在接受我看到的严重警告而不愿意.还有哪些其他解决方案?

解决方法

学会爱回调. :-)当人们这样做时:

// The synchronous way
function doSomething() {
    var foo;
    $.ajax({
        url: "/the/url",async: false,success: function(responsE) {
            foo = response.foo;
        }
    });
    return foo;
}

// ..@L_364_14@mewhere else,we use it
function flurgle() {
    var bar = /* go get `bar` from somewhere */;
    var x = 52;

    if (doSomething() === bar) {
        x -= 10;
    }
    niftyFunctionUsing(X);
}@H_772_14@ 
 

…事件驱动的异步方式真的没那么大不同:

// The asynchronous way
function doSomething(callBACk) {
    $.ajax({
        url: "/the/url",success: function(responsE) {
            callBACk(response.foo);
        }
    });
}

// ..@L_364_14@mewhere else,we use it
function flurgle() {
    var bar = /* go get `bar` from somewhere */;
    var x = 52;

    doSomething(function(foo) {
        if (foo === bar) {
            x -= 10;
        }
        niftyFunctionUsing(X);
    });
}@H_772_14@ 
 

由于回调经常涉及闭包(上面的那些,我们正在访问x和bar的方式),我的博客中的这篇文章可能会有所帮助:Closures are not complicated

大佬总结

以上是大佬教程为你收集整理的避免在jQuery中使用async:false的策略?全部内容,希望文章能够帮你解决避免在jQuery中使用async:false的策略?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。