0

我尝试使用查询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

我得到空警报,表格表现得就像他得到“返回真实”一样。我也尝试放置变量并返回他,但仍然是同样的问题..

为什么会这样?如何修复它?

4

2 回答 2

0

请参阅我对您的问题的第一条评论,这就是为什么它不起作用。

可以做这样的事情,但我推荐它:

var foo = null;

$.ajax({
    url: '/',
    method: 'POST',
    async: false,
    success: function(result) {
        foo = result;
    }
});

// use foo
于 2013-03-01T10:44:15.543 回答
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
   }
}
于 2013-03-01T11:44:24.290 回答