2012-04-02 68 views
2

我有一個ajax調用。我把返回值(數據)放在一個名爲mydata的變量中。我想在ajax調用之外使用該變量。請注意,我無法將我的代碼併入ajax調用的成功部分。我不會詳細說明原因,因爲它會增加混淆。所以問題很簡單。有沒有辦法在ajax調用之外使用ajax調用的返回值?預先感謝您的回覆。乾杯。馬克jQuery - 如何使用ajax調用外的ajax調用的返回值

$.ajax({ 
    type: "POST", 
    url: "file.php", 
    data: ajaxData, 
    success: function(data) { 
     var mydata = data;  
    } 
}); 

alert(mydata); // -> This is not working 
+0

只是聲明'在你需要它(即外呼)範圍VAR mydata'。 – m90 2012-04-02 09:17:29

+0

'var mydata = null; $就({ 類型: 「POST」, URL: 「file.php」, 數據:ajaxData, 成功:功能(數據){ MYDATA =數據; } });警報(mydata);' – YumYumYum 2012-04-02 09:17:55

回答

3

簡短的回答:不,你不能,作爲一個在AJAX的全稱是「異步」,因此該腳本不「等待」 AJAX調用來完成。

你可以,如果你願意,使用間隔輪詢看到MYDATA是否設置:

var mydata = null; 

$.ajax({ 
    type: "POST", 
    url: "file.php", 
    data: ajaxData, 
    success: function(data) { 
     var mydata = data;  
    } 
}); 

var timerId = setInterval(function() { 
    if(mydata !== null) { 
     // your code 
     clearInterval(timerId); 
    } 
}, 1500); // change this to your liking, doesn't really matter 

但這是假設file.php永遠不會返回數據空

+0

謝謝你的確認... – Marc 2012-04-02 09:23:11

+2

這是糟糕的workarround。如果ajax調用不成功返回它將無限循環 – Yorgo 2012-04-02 09:27:47

+0

如果ajax調用不返回,那麼mydata將始終爲null,並且mydata!== null將失敗,並且它會立即從該函數每1.5秒返回一次... – 2012-04-02 09:29:11

0

不,你不能設置回調值到js全局變量。您必須在回調堆棧中使用回調值。

1

通過不工作,你的意思是你得到未定義或對象的警報?

在你的例子中,數據將是一個返回的json對象。因此,您需要知道該對象的結構才能使用它。

例如,如果結構爲:

數據= {名稱= 「鮑勃」,位置= 「倫敦」}

然後data.name會給你的價值鮑勃。

此外,mydata變量是jquery post函數的局部變量,您需要在函數外部定義它以在函數外部使用它。

2

嗯,我不建議在任何情況下都使用全局變量,儘管我不確定你想在那裏做什麼,但是你可能想把你的數據過程包裝在一個函數中。

該代碼工作正常,它只是異步,並且您的可變數據正在被填充。嘗試這樣的事情這在控制檯上看到你的數據:

var process(data) { 
    // output your data 
    console.log(data); 
} 

$.ajax({ 
    type: "POST", 
    url: "file.php", 
    data: ajaxData, 
    success: process 
});