Javascript 不推荐使用Ajax异步false?

Javascript 不推荐使用Ajax异步false?,javascript,jquery,ajax,asynchronous,Javascript,Jquery,Ajax,Asynchronous,我使用jQuery1.7,并对AJAX请求使用async:false,但我知道该函数已被弃用 我需要使用回调,但这不起作用: $("#form").submit(function(e) { var cnf; $.ajax({ type: "POST", url: 'page.php', data: $('#form').serialize(), async: true, success: function(responseText) {

我使用jQuery1.7,并对AJAX请求使用
async:false
,但我知道该函数已被弃用

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

$("#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
,这就行了。使用回调,我在这里看到了解决方案:

来自文档:

从jQuery1.8开始,不推荐在jqXHR($.Deferred)中使用async:false

您没有将它与
jqXHR
一起使用


也就是说,非异步HTTP对于JavaScript来说是可怕的,最好避免。在回调中或从回调中执行工作。不要试图将数据返回到调用函数,以便它能够完成工作。

继续评论:您似乎对回调有点着迷,而您似乎不需要任何回调:)

对现有代码的简单更改是扔掉
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
        }
    });
});

依赖于AJAX调用结果的任何内容都必须位于、由所述AJAX调用的回调调用或(对于事件)附加的回调中。
async:false
只有在使用延迟对象方法时才被弃用。要回答您的问题,请参阅:啊,是的,来自1.8谢谢您AX从来都不是个好主意。
1)
永远不要使用
async:false
。曾经时期了解并热爱您的回调和
jQuery承诺
2)
关于这方面的任何争论,请参见
1)
:)我猜您的意思是“sync HTTP太可怕了”是的,谢谢你,昆汀,我没有看到它来自jqXhr,我在javascript/jquery中是新的,我使用这个简单的方法联系我,我没有完整的代码,但如果步骤1很好,我需要更改(如付款系统)1:电子邮件,2姓名和地址我在一个步骤中添加了所有内容:)你需要显示所有代码以获得完整的答案,但希望这为你指明了正确的方向。