2014-06-12 58 views
2

我正在使用jQuery 1.7,并且使用async:false来处理我的AJAX请求,但我已经了解到此函数已被弃用。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这工作。使用回调我在这里看到了解决方案:wait for a jquery ajax callback from calling function

+0

凡是依赖于AJAX调用的结果,*必须*被所述AJAX调用的回调附加,呼叫或(对于事件)。 –

+0

'async:false'仅在使用延迟对象方法时被弃用。为了回答您的问题,请参见:http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call –

+0

是啊是1.8感谢您 – user3710381

回答

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 
     } 
    }); 
}); 
+0

我没有COMPLET我的代码,但我需要改变

如果第1步是好的(如paiement系统)1:电子邮件,2名和地址 – user3710381

+0

我有添加所有在一个步骤:) – user3710381

+0

你需要显示你所有的代码来获得一个完整的答案,但希望这指出你在正确的方向。 –

5

从文档:

在jQuery 1.8,采用异步的:假与jqXHR($ .Deferred)已被弃用

您并未使用jqXHR

这就是说,非异步HTTP是可怕的JavaScript和最好避免。在回调中进行工作或从回调中完成工作。不要尝试将数据返回给调用函数,以便它可以完成这项工作。

+2

我认为你的意思是“*同步HTTP是可怕的*”? – Bergi

+0

ooops,已更正。谢谢:) – Quentin

+0

是感谢你昆汀我没有看到它在使用Javascript/jQuery的jqXhr即时通讯新我用这个简单的方法联系人形式 – user3710381