2010-05-25 140 views
0
function isNewUsername(str){ 
    var result; 
    $.post('/api/isnewusername', 
      {username:str}, 
      function(data) { 
       result = data.result; 
      }, 
      "json"); 
    return result; 
} 

所以,我的問題很簡單,但我無法弄清楚。我想要訪問isnewusername函數的結果。我對答案非常好奇,因爲我花了1個小時。 謝謝我怎樣才能從jquery ajax請求返回數據?

+0

你不能像那樣返回那個函數。 $ .post是異步的,該函數將在調用服務器文件之前返回。使用異步AJAX調用。 – Ben 2010-05-25 04:47:15

+0

這似乎是一個常見問題。在進行異步調用之後,函數的返回值有很多問題。我用''return-value''來標記這個以整合類似的問題。 'javascript + ajax + return-value'是一個足夠好的組合,可以涵蓋這個和所有類似的問題。 – Anurag 2010-05-25 04:58:28

回答

0

,當您使用快速記下jQuery post function您正在使用的jQuery ajax function的簡寫形式,這意味着你正在做的異步調用。因此,只有在成功響應時,jQuery纔會調用您的函數,並將您服務器端調用的結果放入成功回調的data參數中。

舉例說明:

function isNewUsername(str){ 
    $.post('/api/isnewusername', 
      {username:str}, 
      function(data) { 
       alert(data.result); 
      }, 
      "json"); 
} 

這就是說你可以改變你的代碼,以指定a synchronous callback但具有直到返回請求鎖定用戶瀏覽器的潛力。

+0

有潛力...它鎖定瀏覽器 – redsquare 2010-05-25 05:16:49

+0

@redsquare正確,但與鎖相關的長度和疼痛取決於各種因素。 – ahsteele 2010-05-27 17:55:10

+0

但它始終有可能讓回覆永遠不會回來......讓用戶崩潰掉瀏覽器。我永遠不會使用。 – redsquare 2010-05-27 22:47:57

2

由於ajax查詢是異步的(這意味着,它們不會被阻塞,並且結果不會立即發生,它會在服務器實際響應時發生)。你必須調用另一個函數的結果(否則,只有在結果實際可用時才做結果)。

例如:

function isNewUsername(str){ 
    $.post('/api/isnewusername', 
      {username:str}, 
      function(data) { 
       someOtherFunction(data.result); 
      }, 
      "json"); 
} 
+0

其實他們可以做到同步,在這種情況下他們*做*塊,但我相信它仍然不能按照OP想要的方式完成。 – nc3b 2010-05-25 04:46:48