function test(){
$.getJSON( "notebook-json-data.php", function( data ) {
var myData = data;
});
}
在我的函数中,我得到了JSON对象,但是我想从其函数的作用域之外访问myData
变量。
我尝试在函数外部设置var myData
,但是没有成功.. :(
我不熟悉JSON,我需要进行任何解析吗?
如何将此变量设置为全局变量?
请帮忙...
function test(){
$.getJSON( "notebook-json-data.php", function( data ) {
var myData = data;
});
}
在我的函数中,我得到了JSON对象,但是我想从其函数的作用域之外访问myData
变量。
我尝试在函数外部设置var myData
,但是没有成功.. :(
我不熟悉JSON,我需要进行任何解析吗?
如何将此变量设置为全局变量?
请帮忙...
不要尝试将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
作为一个全局变量被缓存,该闭包专属。请注意,只有在回调函数完成后,其他函数才能使用该变量。
myData
中 - 这是一个全局变量,但仅限于该闭包。 - Andy不要创建全局变量,最好在“完成”时调用回调函数,像这样:
$.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
});
var APP = APP || {}
APP.myData = data;
APP.myData
var myData
,在函数内不要重复使用var
(这会创建一个新的被遮蔽的myVar
)。请记住,调用是异步的,所以你不能简单地在getJSON
调用之后访问它。 - Alex K.test()
中。 - CodingIntrigue)
。 - Andy