2013-01-17 163 views
0

可能重複:
How to return the response from an AJAX call from a function?JavaScript變量不保留價值

我有一個功能,通過網絡從文件中讀取數值數據。在正確檢索文件時(通過警報顯示的值證明),當我嘗試將其設置爲輸出並返回輸出時,我得到未定義的結果。

我試圖通過範圍教程無濟於事。我究竟做錯了什麼?

function readFileFromWeb() { 
    var output; 

    jQuery.get('http://domain.com', function(data) { 
     alert(data); 
     output = data; 
    }); 

    return output; 
} 
+5

歡迎來到**異步**的美妙世界!你不能那樣做。 – SLaks

+0

@FelixKling:當我在那個問題下看到你的名字時,我感到很震驚......;/ – georg

+0

2方法來做你想做的事情: 1)讓你同步AJAX 2)實現一個基於計時器的功能,等待響應將值分配給您要使用的變量。 – marekful

回答

3

下面是通過回調函數應該如何完成的。

function readFileFromWeb(callback) { 
    jQuery.get('http://domain.com', function(data) { 
     callback && callback(data); 
    }); 
} 

// ... 

readFileFromWeb(function (data) { 
    alert(data); 
}); 

這是因爲jQuery.get是一個異步函數,即它在執行時不阻塞,因此立即返回。這就是爲什麼jQuery.get函數需要一個回調函數的原因,所以一旦AJAX查詢返回,它就會觸發你的回調函數。

因此,在實現您自己的readFileFromWeb函數時,您將需要使用相同的回調模式。

+0

你能描述一下'callback &&回調(數據)是什麼嗎?如果它作爲參數傳遞,則回調被執行,不是嗎? – kidwon

+1

是的,我使用邏輯運算符中使用的短路機制只調用'回調',如果它包含真值。請注意,如果'callback'不是一個函數,那麼這段代碼仍然會失敗,因爲我沒有驗證它。 –

+0

我明白了,10x分享 – kidwon

1

這是異步的,我評論了你的代碼,以幫助你理解事情發生的順序。

function readFileFromWeb() { 
    //1. create variable. 
    var output; 

    //2. make ajax call. 
    jQuery.get('http://domain.com', function(data) { 
     alert(data); 

     //4. set variable from ajax callback 
     output = data; 
    }); 

    //3. return variable. 
    return output; 
} 
+1

+1用於列出評估訂單。 –