2012-02-24 81 views
0

我試圖從jsonp請求的結果中創建一個變量,並且稍後在腳本中使用此變量。但似乎在使用變量的部分在jsonp請求完成之前觸發。在jsonp請求完成之前嘗試讀取var

function onSuccess(data) { 
    var result = data['result']; 
    console.log(result); 
} 

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

$.ajax({ 
    url:"http://suneeriksen.unboxer.org/", 
    cache: false, 
    dataType: 'jsonp', 
    jsonp: 'callback', 
    timeout: 5000, 
    success: onSuccess, 
    error: onError 
}); 


var gallery, 
    el, 
    i, 
    page, 
    dots = document.querySelectorAll('#nav li'), 
    slides = result //this is where I try to fetch the variable 

    ]; 

我試圖弄清楚如何做到這一點。我試圖把jsonp請求放在一個函數中,如下所示: var slides = jsonpResult();

任何線索怎麼辦?

編輯: 我也有使用畫廊變量

gallery.onFlip(function() { 
//Doing stuff 
} 

功能和我不能把所有的這些在的onSuccess功能。

+1

那麼,你*不能*做的是訪問結果,你試圖訪問它。相反,任何依賴於'result'變量的代碼都需要放在'success'回調中。 – 2012-02-24 19:54:55

+0

很好的建議,但我有功能,將在稍後調用,這取決於畫廊變種。我爲我的問題添加了更多信息。 – Spoeken 2012-02-25 03:25:10

+0

執行此操作的唯一方法(不使用'async:false',這很糟糕)是存儲'jqXHR'對象,稍後將事件綁定到完成時,您需要運行需要它返回的數據的代碼。 – 2012-02-25 03:26:39

回答

1

有兩種方式:

使通過在Ajax調用選項設置async: true AJAX調用不是A(同步)(請注意,這種方法現在已經過時)。

或:

不調用任何代碼,使用slides變量從成功回調內(並在那裏做了分配,以及,如果你需要它以備將來使用)。

+0

不知何故,這突然工作。讓我們希望它保持這種狀態 – Spoeken 2012-02-25 04:30:25

3

爲onSuccess綁定它 - 在onSuccess發生之前不要調用使用它的函數。 你也可以強制你的請求是同步的(在你的ajax運行之前不會執行代碼),但我強烈建議你不要。

+0

我試過了,但它似乎是因爲成功觸發了一個函數,它並不打擾完成。 – Spoeken 2012-02-25 03:47:10

相關問題