我有以下代码:
$.ajax({
type: "POST",
async: false,
url: "CheckIdExist",
data: param,
success: function(result) {
if (result == true){
return false;
}
},
error: function(error) {
alert(error);
return false;
}
});
如果AJAX返回值为true,窗体需要停止提交。
但它不会停止提交表单。
任何帮助,请。
我假设你有这样的:
form.submit(function(event) {
$.ajax(...);
});
你想return false
(或调用event.preventDefault()
在事件处理函数本身,而不是在AJAX调用,如:
form.submit(function(event) {
$.ajax(...);
event.preventDefault();
});
这个问题的细微变化是:我想用jQuery和Ajax来呈现一个错误信息给用户,但后来做的正常处理,如果没有错误。
假设法“检查”返回空,如果没有错误的响应,并且有错误(收费),如果有任何。
然后,你可以做这样的事情在你准备好功能:
$("#theform").submit(function() {
var data = { ... }
$.get('/check', data,
function(resp) {
if (resp.length > 0) {
$("#error").html(resp);
} else {
$("#theform").unbind('submit');
$("#theform").submit();
}
});
event.preventDefault();
});
那么它是怎样工作的? 当外提交功能被触发,它建立所需AJAX调用(这里的高层次功能GET)数据。 通话计划,并且运行的主线程立即继续,但提交无条件地停止了,所以没有什么明显的反应。
经过一段时间,和AJAX调用返回请求的结果。 如果非空,则结果被示出给用户。
如果响应是空的,但是,提交功能绑定。 这可以防止ssytem通过外提交功能进行额外的呼叫。 内提交函数被调用。 这会触发一个实际的形式提交表单的目标,并预期生活还要继续。
你需要做一个回调。
在FAQ此项目对我帮助很大,当我有这个确切的问题。
getUrlStatus('getStatus.php', function(status) {
alert(status);
});
function getUrlStatus(url, callback) {
$.ajax({
url: url,
complete: function(xhr) {
callback(xhr.status);
}
});
}
其原因是,你不能在一个AJAX函数返回。
上面的代码不会如所希望的,由于异步编程的性质工作。 所提供的成功处理程序不立即调用,而是在将来的某个时候响应从服务器接收。 所以,当我们在$就调用后立即使用“状态”变量,它的价值仍然不确定。
你不能把这个代码在一个函数或一个形式的onsubmit,成功函数返回它的结果返回给jQuery的AJAX的背景下,而不是形式提交环境。
在这种情况下,你需要执行同步HTTP请求,即你必须设置异步选项设置为false。
在你的版本httpxmlrequest是异步的。 它可能会结束很久之后你的onsubmit处理已返回和的onSuccess回调进行调用onsubmit处理程序的上下文。
匿名函数功能(结果){...}而不是onsubmit处理程序的返回值的“返回false”将返回值。
我也有这个问题,但通过改变输入类型=“提交”,键入=“按钮”,然后就做你的Ajax请求解决它
$("input#submitbutton")
{
$.ajax(
{ type: "POST",
async: false,
url: "CheckIdExist",
data: param,
success: function(result) {
if (result == true){
//TODO: do you magic
}
else
$("form").submit();
},
error: function(error) {
alert(error);
return false;
}
});
});