获取函数外的json请求的变量(jquery)

时间:2011-06-22 16:12:56

标签: ajax json jquery

我觉得这很愚蠢,但是如何在函数

之外得到变量crdnts
$(function() {
    var coordinates = {
        LoadDefault: function() {
             $.getJSON('http://api.wipmania.com/jsonp?callback=?', '', function(json) {
                var crdnts = json.latitude + "," + json.longitude;
                //alert(crdnts);//this works
                return crdnts;
            });
        }
    };
    alert(coordinates.LoadDefault());//I would like to get the crdnts variable here.
});

http://jsfiddle.net/stofke/Lv3YD/

2 个答案:

答案 0 :(得分:2)

你做不到。您的Ajax调用是异步的,因此无法预测何时返回。

你唯一能做的就是在成功回调中做一些事情,或set your Ajax to be synchronous如果它是一个选择(在这种情况下,所有JS执行将等到请求完成)。

例如,您可以在Ajax调用成功完成后调用函数:

$(function() {
    var coordinates = {
        LoadDefault: function() {
             $.getJSON('http://api.wipmania.com/jsonp?callback=?', '', function(json) {
                var crdnts = json.latitude + "," + json.longitude;
                callSomething(crdnts);
            });
        }
    };

    function callSomething(x) {
        alert(x);
    }
});

答案 1 :(得分:2)

javascript ajax是异步的。所以你需要使用回调:

$(function() {
    var coordinates = {
        LoadDefault: function() {
             $.getJSON('http://api.wipmania.com/jsonp?callback=?', '', function(json) {
                var crdnts = json.latitude + "," + json.longitude;
                call_alert(crdnts); //callback
            });
        }
    };
    function call_alert(cr){
         alert(cr);
    }
    coordinates.LoadDefault();
});