2013-03-01 16 views
0

我尝试使用查询阿贾克斯,当我已经“返回false”我知道在php文件我只是回应“丹尼斯”回调以及使用jQuery AJAX没有回调的时候还真

$(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 

,它的工作原理和我对内容“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 

我得到空警戒和形式的行为像他得到“返回true”。 我也尝试把变量和回报他,但仍然是同样的问题。

为什么发生?如何修复它?

+3

你不能访问匿名成功功能外'callback'变种。 – Imperative 2013-03-01 10:35:52

+1

[如何从函数返回AJAX调用的响应?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call-从-A-功能) – 2013-03-01 10:36:08

+0

你将不得不把 如果(回调== “丹尼斯”){ 返回FALSE; } else { return true; } 条件内成功功能。 – 2013-03-01 10:36:34

回答

0

这是因为Ajax的范围将执行异步的,因此,当您检查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 
    } 
} 
0

看到我对你的问题的第一条评论,这就是为什么它不工作。

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

var foo = null; 

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

// use foo 
相关问题