Ajax async false已弃用?

我正在使用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:

 

如果我使用async: false这是有效的。 使用callBack我在这里看到解决方案: 等待来自调用函数的jquery ajax回调

继续评论:当你似乎不需要任何回调时 ,你似乎有点痴迷于回调 ! 🙂

对现有代码的简单更改是丢弃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'); // eg move on to "step 2" } }, error: function () { // Do something when it fails here } }); }); 

从文档:

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

您没有在jqXHR使用它。

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