2012-10-09 231 views
0

我無法從該函數獲取值,我不知道爲什麼,但返回空值。我用螢火蟲調試它,它運行兩次,第一個返回空,然後第二個返回值。函數不返回值

任何想法如何我可以糾正這一點。

function validation() { 
    if (val()); { 
     alert("Error"); 
    } else { 
     alert("Pass"); 
    } 
} 

function val() { 
    var answer; 
    dojo.xhrGet({ 
     url: "ValodS?option=12", 
     handleAs: "text", 
     load: function (response) { 
      if (response == 'Pass') { 
       answer = false; 
      } else { 
       answer = true; 
      } 
     } 
    }); 
    return answer; 
} 
+3

您不能從...返回* asynchronous *請求的結果.. 。Nevermind。 –

+0

因爲AJAX調用是異步的。 –

回答

1

的問題是正在不斷被髮送之前,它不會阻塞調用代碼(AJAX請求在底色上運行,你回來的答案。

最簡單的解決辦法是讓主叫方傳遞一個回調函數,然後可以調用load處理函數內部的回調函數(從而以這種方式傳遞數據)。

+0

你能給我一個例子,我有點困惑。 – user1725253

+0

如果可以讓你的GET請求同步,你可以添加'sync:true'對象傳遞給'dojo.xhrGet'。這將允許設置您的'answer'變量在請求的'load'回調中設置,並且它將在'val()'結尾處返回。這很可能不是最好的方法,雖然對於其他人已經提到的用法,異步請求(您目前擁有的)會更好地工作(但它不會在加載回調之外「回答」)。 – laupow

+0

這可能是將sync設置爲true的問題; – user1725253

0

你有額外的;您if

更改的第一行從

if (val()); 

if (val()) 
1

後當VAL的回報,answer不分配。您正在調用發送http請求的異步操作。然後控制流程繼續,並且當http請求最終完成時,執行您定義的匿名函數,該函數指定answer