所以我在这里得到的非常直接:
$("form").submit(function() {
var loc = $("input#location").val();
var response = $.ajax({
url: "checklocation.php",
data: {loc: loc},
async: false,
type: "POST",
success: function(msg) {
if (msg['status'] == "OK") {
return true;
} else {
return false;
}
}
});
return !(response['responseText'].indexOf("ZERO_RESULTS") != -1);
});
checklocation.php返回一个json String。两个返回都没有被命中,但是如果我在其中一个中抛出alert(),条件确实有效。但是,如果我在Firebug中逐步执行此操作,则看起来似乎永远不会执行success函数中的内容。
每次都会返回true,无论是什么(提交表单)。
编辑:
即使在简化之后:
$("form").submit(function() {
var loc = $("input#location").val();
var response = $.ajax({
url: "checklocation.php",
data: {loc: loc},
type: "POST",
success: function(msg) {
if (msg == '1') {
return false;
} else {
return true;
}
}
});
});
尽管响应的statusText是'成功',它仍会跳过成功函数。
答案 0 :(得分:1)
我不知道你为什么使用async:false
,据我所知,可能的解决办法是,
$("form").submit(function() {
var loc = $("input#location").val();
var response = $.ajax({
url: "checklocation.php",
data: {loc: loc},
type: "POST",
success: function(msg) {
if (msg['status'] == "OK") {
return true;
} else {
return false;
}
},
complete: function(){
return !(response['responseText'].indexOf("ZERO_RESULTS") != -1);
},
});
});
由于
,可能会出现问题 return !(response['responseText'].indexOf("ZERO_RESULTS") != -1);
可能在执行成功回调之前执行,实际上此时response['responseText']
未定义。但是你会得到响应,因为已经发送了ajax请求。
答案 1 :(得分:0)
就像thujeevan指出最后一行是在ajax有时间完成之前执行的,所以当函数检查并返回时,响应变量正在进行中。
这项工作的最佳方法是使用普通按钮替换提交按钮,当单击该按钮时,将运行此检查。然后你将另一个代码放入表单的提交操作中,只有在检查完成后才提交,并且没有。
像这样:
<form method="post" id="theform">
<input type="text" id="location" />
<input type="button" id="button_submit" value="Submit" />
</form>
<script>
var ok = false;
$('#button_submit').click(function () {
var loc = $('input#location').val();
$.ajax({
url: 'checklocation.php',
data: {loc: loc},
type: 'POST',
success: function(msg) {
ok = (msg['status'] == "OK");
},
error: function () {
ok = false;
}
});
$('#theform').submit();
});
$('#theform').submit(function () {
return ok;
});
</script>
希望这有帮助! ;)