所以我在这里得到的非常直接:
$("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中逐步执行此操作,则看起来好像函数中的东西永远不会被执行 .
无论如何(表单提交),每次都会返回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是“成功”,它仍会跳过成功功能 .
2 回答
我不知道你为什么使用
async:false
,据我所知,可能的修复方法是,问题可能是因为
return !(response['responseText'].indexOf("ZERO_RESULTS") != -1);
可能在执行成功回调之前已执行,实际上此时
response['responseText']
未定义 . 但是你会得到响应,因为已经发送了ajax请求 .就像thujeevan指出最后一行是在ajax有时间完成之前执行的,所以当函数检查并返回时,响应变量正在进行中 .
最好的方法是使用普通按钮替换提交按钮,当单击该按钮时,将运行此检查 . 然后你将另一个代码放入表单的提交操作中,只有在检查完成且提交时才提交 .
像这样的东西:
希望这可以帮助! ;)