$ .getJSON使其结果全局化

时间:2012-08-18 16:13:50

标签: javascript jquery

我正在使用jQuery函数$.getJSON从服务器端获取一些数据,这里是代码:

function (){
  $.getJSON("someURI",function(result){
    //this alert works fine
    alert(result.msg) 
  });

  // this prints the data as undefined
  alert(result.msg); 
}

如何更改从$.getJSON返回的“结果”的范围,以使其全局..使第二个警告打印其值不是未定义的?

4 个答案:

答案 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
  });