2012-02-24 39 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

相关问题