我正在使用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
答案 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
}
});
});