function test(){
$.getJSON( "notebook-json-data.php", function( data ) {
var myData = data;
});
}
在我的函数中,我得到了json对象,但我想从其函数范围的外部访问 myData
变量。
我尝试在功能外设置 var myData
,但没有运气.. :(
我不熟悉JSON,我需要解析吗?
如何将此变量设置为全局?
请帮忙......
答案 0 :(得分:12)
不要试图将myData
设置为全局变量 - 它不会起作用,因为getJSON
是异步的。使用promise:
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
被缓存为特定于该闭包的全局变量。请注意,其他函数只能在回调完成后才能使用该变量。
答案 1 :(得分:5)
不是创建全局变量,最好在" done"上调用回调,如下所示:
$.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'
}
答案 2 :(得分:4)
您可以使用回调以便从成功块中获取数据
function test(callback){
$.getJSON( "notebook-json-data.php", function( data ) {
callback(data);
}
}
test(function(data){
//Use your data here
});
答案 3 :(得分:1)
声明一个全局json对象
var APP = APP || {}
现在,您可以使用
将动态数据设置为该对象APP.myData = data;
您可以在js文件中的任何位置获取此内容。使用
APP.myData