我尝试使用查询ajax,当我有“return false”时,我也会收到回调
$(document).ready(function(){
$("form#Form").submit(function(){
$.ajax({
url: "ajax.php",
type: "POST",
data: $(this).serialize(),
success: function(callback){
alert(callback);
} //success
}); //ajax
return false;
}); //submit
}); //ready
在php文件中我只是回应“dennis”,它有效并且我对内容“dennis”保持警惕。 当我尝试这样的事情时:
$(document).ready(function(){
$("form#Form").submit(function(){
$.ajax({
url: "ajax.php",
type: "POST",
data: $(this).serialize(),
success: function(callback){
alert(callback);
} //success
}); //ajax
if (callback == "dennis"){
return false;
}else{
return true;
}
}); //submit
}); //ready
我得到空警报,表格表现得像是“返回真实”。 我也尝试把变量放回去,但仍然是同样的问题..
为什么会这样?如何解决?
答案 0 :(得分:0)
请参阅我对您问题的第一条评论,这就是为什么它无效。
你可以做这样的事情,但我不推荐它:
var foo = null;
$.ajax({
url: '/',
method: 'POST',
async: false,
success: function(result) {
foo = result;
}
});
// use foo
答案 1 :(得分:0)
这是因为ajax-scope将执行异步,因此当你检查if (callback == "dennis")
时,你的ajax调用可能甚至还没有到达你的php,因此回调将是 undefined
您需要在成功范围内检查callback
(它实际上是一个错误的变量名称,因为它不是回调,而是来自您的ajax调用的结果)。
$.ajax({
url: "ajax.php",
type: "POST",
data: $(this).serialize(),
success: function(callback){
alert(callback);
if (callback == 'dennis') {
return true;
} else return false;
} //success
}); //ajax
现在,你的下一个问题是你的表单可能已经返回true,所以最好用你的结果调用一个新函数,而不是在这里返回true | false。
// ajax metod success function
success: function(result){
alert(callback);
onFormReturn(result);
} //success
并定义处理结果的函数
// elsewhere, outside ajax-scope - even outside document.ready
function onFormReturn(result) {
if (result == "dennis") {
// do your stuff
} else {
// do something else
}
}