2013-03-01 15 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 
相關問題