2010-08-18 100 views
1

我正在使用JQuery getJSON函數來獲取一些JSON格式的數據。如何從函數內部獲取JavaScript變量值?

的數據將通過YouTube的JavaScript API一起使用:http://code.google.com/apis/youtube/js_api_reference.html

的JSON數據不會從YouTube中提取。這是一個簡單的,手寫的列在CSV上的YouTube視頻ID和標題列表。我正在使用PHP來讀取CSV並創建一個JSON對象。

問題的根源在於,當我將任何YouTube JavaScript API代碼放在「document.ready」中時,YouTube代碼就神祕地停止工作。

我已經得到了完整的播放器的功能(JSON包含在HTML頁面中),但現在我面臨這個障礙,因爲我試圖外部化數據(使用$ getJSON)。對於我的播放器來說,我需要首先在document.ready中使用JQuery代碼。接下來,我需要擁有YouTube播放器代碼,並且它應該在document.ready之外。

這是我失敗的嘗試獲得了$的getJSON返回的數據:

$(document).ready(function(){ 

$.getJSON('bar.php', function(data) { 
    var baz = data; 
      return baz; 
}); // getJSON 

}) // ready 
console.log("baz: " + baz); 

,我怎麼把巴茲的價值?

回答

0

爲什麼不能用getJSON函數中的返回數據做你想做的事?

$(document).ready(function(){ 
    $.getJSON('bar.php', function(data) { 
      // Use data... 
      alert("I'm in your function processing your data"); 
    }); 
}); 
0

jQuery.getJSON是AJAX調用的簡寫:

$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: callback 
}); 

所以,你將有回調中的數據,或者需要將數據從回調中調用的任何代碼工作。

$(document).ready(function(){ 
    $.getJSON('bar.php', function(data) { 
    var baz = data; 
    console.log(baz); 
    }); // getJSON 
}) // ready 
1

在這種情況下,你不能,有兩個原因。

第一個可以解決的問題是變量的範圍是形成方法的第二個參數的匿名函數。

第二個問題比較難處理,那就是Asynchronous JavaScript and XML is Asynchronous。方法getJSON設置下載,但腳本然後繼續運行。 console.log行已到達之前baz已被賦值。

用JavaScript編寫的任何複雜程序都將由事件驅動。當你設置某些動作時(比如Ajax調用),你必須通過回調方法處理結果。

做任何需要在你傳遞給getJSON(或從那裏調用的另一個函數)的匿名函數中完成。

+0

head' - >'desk。 – 2010-08-18 22:13:38

相關問題