2010-02-26 36 views
3

我有一個非常奇怪的情況。我想return一些數據 - 通過ajax下載的數據。到目前爲止,同步模式不能及時獲得數據到return。是否有可能我可以從父函數的子函數中調用return,或者timeOut是否可以解決問題?我無法想到另一種方式,但必須返回數據。有沒有一種方法可以從JavaScript中的子函數調用父函數的返回值?

+0

返回*不是*函數!雖然也許引發異常可以做你想做的事情? – Ponkadoodle 2010-02-26 00:33:05

+0

有沒有一種方法可以像'return'那樣返回一個數組? – 2010-02-26 00:56:42

+0

也許在你的函數中告訴你正在使用jQuery是合適的? – zneak 2010-02-26 00:57:50

回答

2

的回答你的問題是沒有。

在異步請求中,函數必須在結果可用之前返回。要解決這個問題,需要使用回調模式 - 在調用這樣的函數時,您不希望返回,而是提供一個回調函數 - 一旦結果可用,就會調用該函數。

這裏有一個簡單的例子:

var someValue; 
fetchValueFrom('http://example.com/some/url/with/value', function(val) { 
    someValue = val; 
    doSomethingElseWith(someValue); 
}); 

在這裏,我們創建一個函數,並把它作爲第二個參數去了fetchValueFrom通話。一旦該值可用,該函數將被調用,並將設置該變量並調用另一個函數來繼續執行。

-1

只要通過false作爲第三個參數到XMLHttpRequest.open。這意味着「同步運行此查詢」。

See the reference自己。

+0

我很喜歡'$ .ajaxSetup({0} {0} {0} {0}我不喜歡',它會解決我所有的問題,但我的代碼似乎忽略它? – 2010-02-26 00:44:53

+0

「從Gecko 30.0(Firefox 30.0/Thunderbird 30.0/SeaMonkey 2.27)開始,由於對用戶體驗的負面影響,主線程上的同步請求已被棄用。」 – 2015-08-18 10:44:16

3

你可以提供一個回調函數:

function parentfunction(callback) { 
    callback(getAjax()); 
} 

function childfunction() { 
    parentfunction(function(ajaxData) { 
     //Do stuff with data 
    }); 
} 
+0

+1回調是在這種異步場景中走的路。 – 2010-02-26 00:32:10

相關問題