2013-08-26 42 views
-2

我有一些事情是這樣的:無法訪問jQuery的數據阿賈克斯成功中設置

$.ajax({ 
    type: 'GET', 
    url: my_url, 
    success: function(data) { 

     $('#some_div').data('test', 'This is a test'); 

    } 
}); 

然後成功回調之外,我試圖訪問我的測試變量像

console.debug($('#some_div').data('test')); 

但這返回undefined

任何幫助,請

謝謝

+3

歡迎** **異步的奇妙世界!那還沒有發生。 – SLaks

+0

它不是異步請求的工作方式...... –

回答

0

您需要熟悉$.ajax.done().fail()方法。

jqXHR.done(function(data,textStatus,jqXHR){}); 對於成功回調選項的替代構造,.done()方法會替換棄用的jqXHR.success()方法。有關實現細節,請參閱deferred.done()。

jqXHR.fail(function(jqXHR,textStatus,errorThrown){}); 對於錯誤回調選項的替代構造,.fail()方法會替換已棄用的.error()方法。有關實現細節,請參閱deferred.fail()。

More Info Here!

0

成功函數發生後請求成功返回。

您做出$就調用後,即之前它檢查的價值得到由AJAX成功回調設置你的console.debug行立即發生:

  1. $('#some_div').data('test')是不確定的
  2. AJAX調用時
  3. $('#some_div').data('test')尚未定義!
  4. 你console.debug線運行
  5. $('#some_div').data('test')仍然是不確定的...
  6. 你的Ajax調用成功地返回; $('#some_div').data('test')現在得到定義

是的,這是異步邏輯如何工作的最簡單的例子,因此您得到的評論。

0

你需要將結果存儲在一個全局變量,即:

var globalVariable; 
$.ajax({ 
    type: 'GET', 
    url: my_url, 
    success: function(data) { 

     $('#some_div').data('test', 'This is a test'); 
     globalVariable = data; 
    } 
}); 

在全球範圍內存儲的東西是不是最好的辦法,所以我建議在Self-Executing Anonymous Function來包裝它避免污染全球範圍。

(注:也有這樣做的,但避免了複雜太多的更好的方法)

+0

$('#some_div')。data('test','This is a test');'全局可用。 –

+0

@KevinB但是,返回到成功函數的數據不是。 – Ashley

+0

對......他使用'這是測試'作爲測試。他顯然將「數據」傳遞給現實。 –