[英]JavaScript get data from json to a global variable
function test(){
$.getJSON( "notebook-json-data.php", function( data ) {
var myData = data;
});
}
在我的函數中我得到了json對象,但我想從其函數范圍的外側訪問myData
變量。
我試過在函數外設置var myData
但沒有運氣.. :(
我不熟悉JSON,我需要解析嗎?
如何將此變量設置為全局?
請幫忙...
不要嘗試將myData
設置為全局變量 - 因為getJSON
是異步的,所以它不起作用。 要么使用承諾 :
function test() {
return $.getJSON('notebook-json-data.php');
}
$.when(test()).then(function (data) {
console.log(data);
});
或者回調:
function test(callback) {
$.getJSON('notebook-json-data.php', function (data) {
callback(data);
});
}
test(function (data) {
console.log(data);
});
編輯
由於您希望在代碼的其他區域中使用數據,因此請使用閉包創建一個環境,使您的變量不會泄漏到全局空間中。 例如,使用回調:
(function () {
var myData;
function test(callback) {
$.getJSON('notebook-json-data.php', function (data) {
callback(data);
});
}
test(function (data) {
myData = data;
autoPopulate('field', 'id');
});
function autoPopulate(field, id) {
console.log(myData);
}
});
myData
被緩存為特定於該閉包的全局變量。 請注意,其他函數只有在回調完成后才能使用該變量。
而不是創建全局變量,最好在“完成”上調用回調,如下所示:
$.getJSON( "example.json", function(data) {
console.log( "json loaded" );
foo(data);
})
.done(function() {
console.log("");
foo1(data);
});
有關更多信息,請參閱getJSON API 。
問題是getJSON是異步的,所以當getJSON處理數據時,代碼的執行仍在繼續。
function test(a){
$.getJSON( "notebook-json-data.php", function( data ) {
a = data;
}
}
var main = function() {
var a;
test(a); /* asynchronous */
console.log(a); /* here, json could be hasn't already finish, most likely, so print 'undefined'
}
您可以使用回調以便從成功塊中獲取數據
function test(callback){
$.getJSON( "notebook-json-data.php", function( data ) {
callback(data);
}
}
test(function(data){
//Use your data here
});
聲明一個全局json對象
var APP = APP || {}
現在,您可以使用動態數據設置該對象
APP.myData = data;
您可以在js文件中的任何位置獲取此信息。 通過使用
APP.myData
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.