使用jquery ajax返回true时没有回调

时间:2013-03-01 10:34:04

标签: jquery ajax forms

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

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

为什么会这样?如何解决?

2 个答案:

答案 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
   }
}