从(Ajax输出)传递返回的数组,以在任何地方用作GLOBAL VARIABLES

时间:2015-07-18 18:14:35

标签: javascript jquery ajax callback jquery-callback

我正在尝试从 Ajax输出(数组中的两个变量)返回,以便在另一个地方的另一个单独函数中使用:

但是无法弄清楚如何将其传递出去到新功能?

我在这里的尝试:

var ip,country;

function getVisitorData(callback) {
    $.ajax({
        type: "GET",
        url: "http://freegeoip.net/json/",
        dataType: "json",
        async: true,
        success: function (response) {
            ip = response.ip;
            country = response.country_code;
            callback(response);
        },
        error: function (response) {
            alert("IP thing didn't work.");
        }
    });
}

function callback(response) {
    return [ip, country];
    //alert(ip + country); /* <- it works here */
}

getVisitorData(callback);

jQuery(document).ready(function () {
    var data = getVisitorData(callback);
    var ip = data[0];
    var country = data[1];
    alert(ip + country);
});

更新

我想将输出用作GLOBAL VARIABLES

所以,得到/使用它就像那样:

jQuery(document).ready(function () {
    alert(ip)
});

很抱歉,如果我对此不够清楚的话!

非常感谢提前!

5 个答案:

答案 0 :(得分:4)

我倾向于支持这里的承诺:

this

这里有效:http://jsfiddle.net/MarkSchultheiss/7bmnsvay/

答案 1 :(得分:2)

function getVisitorData(callback) {
    $.ajax({
        type: "GET",
        url: "http://freegeoip.net/json/",
        dataType: "json",
        async: true,
        success: function (response) {
            ip = response.ip;
            country = response.country_code;
            callback(response);
        },
        error: function (response) {
            alert("IP thing didn't work.");
        }
    });
}
function callback(data) {
    var ip = data[0];
    var country = data[1];
    return [ip, country];
}

jQuery(document).ready(function () {
    getVisitorData(callback);
});

callback中的数据操作功能不在任何其他功能中。有关详细信息,请访问Callback function

答案 2 :(得分:0)

创建一个全局对象。

Var objMyData = {};

将ip和国家/地区代码存储在该对象中。

objMyData.IP = response.IP; objMyData.Country = response.country_code;

现在将objMyData对象作为参数传递给任何函数。

答案 3 :(得分:0)

我不知道为什么你需要在你的回调中返回一个数组。由于ajax是异步的,它不会等到响应到来,它将执行其余的语句。所以返回值会给你未定义。只有在响应到来之后才能使用/分配响应。

function getVisitorData(callback) {
    return $.ajax({
        type: "GET",
        url: "http://freegeoip.net/json/",
        dataType: "json",
        async: true

    });
}

jQuery(document).ready(function () {

    $.when(getVisitorData())
    .done(function(respone) {
      var ip = response.ip;
      var country = response.country_code;
      //here you can trigger a custom event with the values, wherever you need, just bind the event and use the data.
       $(document).trigger("responseDataPublished", [ip, country]);
    })
    .fail(function(response){
       alert("IP thing didn't work.");
    });
});

答案 4 :(得分:0)

这是我们很多人不知道的常见问题,在您的服务调用成功或失败之前,您的服务调用旁边的行将执行,因此您需要设置一些超时

//创建一个全局对象。 var objMyData = {} global object;

function getVisitorData(){function call     $阿贾克斯({`阿贾克斯         类型:“GET”,         网址:“http://freegeoip.net/json/”,         dataType:“json”,         异步:是的,         成功:功能(响应){             //在该对象中存储ip和国家/地区代码。             objMyData.ip = response.ip;             objMyData.Country = response.country_code;         },         错误:函数(响应){             警报(“知识产权不起作用。”);         }     }); }

jQuery(document).ready(function(){     //现在将objMyData对象作为参数传递给任何函数。     getVisitorData(); method call     setTimeout(function(){console.log(objMyData);},500); });