Javascript 不推荐使用Ajax异步false?
我使用jQuery1.7,并对AJAX请求使用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) {
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姓名和地址我在一个步骤中添加了所有内容:)你需要显示所有代码以获得完整的答案,但希望这为你指明了正确的方向。