async:false option not working in $.ajax() , is it depreciated in jQuery 1.8+ for all use cases?

前端 未结 3 621
耶瑟儿~
耶瑟儿~ 2020-12-11 05:26

I\'m confused about using the async: false option with $.ajax(). According to the $.ajax() documentation:

As of jQuery 1.8, the use of async: false w

相关标签:
3条回答
  • 2020-12-11 05:57

    The Deferred object in jQuery handles promises in AJAX. As it is, async: false would completely break the notion of asynchronous calls for which you need to handle promises.

    What the jQuery doc snippet is telling you is that something like this would be prohibited.

    $.ajax({
        async: false,
        /*rest of the options*/
    }).done(function(){
        //do something after the response comes back successfully
    });
    

    However, attaching callback options is completely valid, and is the only way of using AJAX with async: false.

    $.ajax({
        async: false,
        /*Rest of the options*/
        success: function(){
                    console.log("foo");
                 }
    });
    
    0 讨论(0)
  • 2020-12-11 06:01

    You trying to use JSONP techinque with async:false at the same time. This is not possible. JSONP is actually creating a script element and appending it somewhere to the document, so it's not an XHR and jQuery can't pass the sync flag anywhere. Since you get data from the same origin, just change dataType to

    dataType:       'json',
    

    However, everyone can tell you that synchronous requests are not good they hang your browser. You should use them only in a small number of cases.

    0 讨论(0)
  • 2020-12-11 06:18

    what it is saying is, if your request is async: false then you should not use ajax.done(), ajax.fail() etc methods to register the callback methods, instead you need to pass the callback methods using success/error/complete options to the ajax call

    correct

    $.ajax({
        async: false,
        success: function(){
        },
        error: function(){
        },
        complete: function(){
        }
    })
    

    wrong

    $.ajax({
        async: false
    }).done(function(){
    }).fail(function(){
    }).always(function(){
    })
    

    if async: true //not specified

    correct

    $.ajax({
    }).done(function(){
    }).fail(function(){
    }).always(function(){
    })
    

    or

    $.ajax({
        async: false,
        success: function(){
        },
        error: function(){
        },
        complete: function(){
        }
    })
    
    0 讨论(0)
提交回复
热议问题