我正在使用jQuery函数$.getJSON
从服务器端获取一些数据,这里是代码:
function (){
$.getJSON("someURI",function(result){
//this alert works fine
alert(result.msg)
});
// this prints the data as undefined
alert(result.msg);
}
如何更改从$.getJSON
返回的“结果”的范围,以使其全局..使第二个警告打印其值不是未定义的?
答案 0 :(得分:4)
你做不到。 AJAX是异步的意味着您只能在result
回调中访问success
变量。您可以将其设为全局,但请记住紧跟$.getJSON
调用之后的行将在之前被称为,success
回调执行后会使其无效。
所以没有全局变量,在回调中使用AJAX调用的结果:
function () {
$.getJSON('someURI', function(result){
// only here you can hope to consume the results of an AJAX call
alert(result.msg)
});
}
这就是AJAX的工作方式。 AJAX中的A代表异步。
答案 1 :(得分:3)
这是一个异步调用..所以你必须等到服务器响应...
在您的情况下,外部警报将是未定义的,因为服务器尚未响应...
此外,result
的范围仅限于callback function
,无法访问......
你可以这样做:
var myJSON;
var serverResponded = 0;
function () {
$.getJSON("someURI", function (result) {
//this alert works fine
myJSON = result.msg;
serverResponded = 1;
});
setTimeout(function () {
if (serverResponded) {
alert(myJSON);
}
}, 500);
}
答案 2 :(得分:1)
$.getJSON
调用是Ajax调用的快捷方式,“Ajax”代表“异步 JavaScript和XML”。
假设您添加了var globalResult
并在成功函数中执行了globalResult = result;
。因此,当您在回调之外拨打globalResult
时,globalResult
将不会被分配。所以,如果你真的必须在外面处理它,你可以检查它是否被分配了一个名为setInterval
的函数,但这太过分了。
答案 3 :(得分:0)
将其保存到另一个类似
的变量中function (){
var something;
$.getJSON("someURI",function(result){
//this alert works fine
alert(result.msg)
something = result
});
如果你想让它在你的函数包装器之外,做一些像这样的事情
var something;
function (){
$.getJSON("someURI",function(result){
//this alert works fine
alert(result.msg)
something = result
});