Ajax async false已弃用?

时间:2014-06-12 14:36:45

标签: javascript jquery ajax asynchronous

我正在使用jQuery 1.7并且我使用async:false来获取我的AJAX,但我已经知道这个函数已被弃用。

我需要使用回调,但这不起作用:

$("#form").submit(function(e) {
var cnf;

$.ajax({
    type: "POST", 
    url: 'page.php', 
    data: $('#form').serialize(),
    async: true,
    success: function(responseText) { 
        if(responseText.indexOf('err') != -1) {
            cnf = "error";
        } 
        else {
            cnf = "success";
        }
        return callBack( cnf );
    }, 
    error: function() {
        cnf = "error";  
        return callBack( cnf ); 
    } 
});


if(cnf == "success")
{
   alert('ok');
}
});

HTML:

<form id="form">
 <input type="text" name="email">
 <input type="submit">
</form>

如果我使用async: false,则可行。使用callBack我在这里看到解决方案:wait for a jquery ajax callback from calling function

2 个答案:

答案 0 :(得分:5)

来自文档:

  

从jQuery 1.8开始,不推荐使用async:false 和jqXHR($ .Deferred)

您没有将其与jqXHR一起使用。

也就是说,非异步HTTP对JavaScript来说很糟糕,最好避免使用。在回调中或从回调中完成工作。不要尝试将数据返回给调用函数,以便它可以完成工作。

答案 1 :(得分:1)

继续评论:当你似乎不需要时,你似乎对回调有点痴迷! :)

对现有代码的简单更改是丢弃cnf并简单地将代码放入ajax调用的成功部分:

$("#form").submit(function (e) {
    $.ajax({
        type: "POST",
        url: 'page.php',
        data: $('#form').serialize(),
        async: true,
        success: function (responseText) {
            if (responseText.indexOf('err') != -1) {
                // Do something when it fails here
            } else {
                // Do something when it succeeds here!!!!
                alert('ok');
                // e.g. move on to "step 2"
            }
        },
        error: function () {
           // Do something when it fails here
        }
    });
});