无法在变量中存储函数值

时间:2013-04-28 12:50:40

标签: javascript jquery

我想在更新变量中存储data.ip值。

alert( "Your ip: " + data.ip)显示正确的IP地址值,但alert(ipdata)显示未定义的

$(document).ready(function () {

    var ipdata;

    $.getJSON("http://jsonip.appspot.com?callback=?",
        function(data){
            ipdata=data.ip;
            alert( "Your ip: " + data.ip);  
        }); 
        alert(ipdata);
    });

});

5 个答案:

答案 0 :(得分:2)

它将无法按预期工作,因为您在ajax调用的回调方法中分配ipdata=data.ip;。 Ajax调用本质上是异步的意味着一旦请求被发送到服务器,alert(ipdata);将在执行ajax callbacl函数之前执行。

因此,您要对ipdata进行的任何处理都必须在回调函数

中完成
$(document).ready(function () {

    var ipdata;

    $.getJSON("http://jsonip.appspot.com?callback=?",
        function(data){
            ipdata=data.ip;
            alert( "Your ip: " + data.ip);  
            alert(ipdata);
        }); 
    });

});

答案 1 :(得分:1)

您正在使用AJAX A进行异步。在$ .getJson函数完成之前评估alert(ipdata)!使用Synchronus请求学习如何使用jquery defferend。

(未经测试)

之类的东西
$.getJSON("http://jsonip.appspot.com?callback=?",
    function(data){
        ipdata=data.ip;
        alert( "Your ip: " + data.ip);  
    }); 
}).done(function (){
    alert(ipdata);
});

答案 2 :(得分:0)

$.getJSON是异步的 -

ipdata=data.ip;
alert( "Your ip: " + data.ip);

alert(ipdata);之后执行。这是ipdata未获得更新的原因

你可以看看这个问题 - https://stackoverflow.com/questions/1632039/return-value-from-ajax-call

答案 3 :(得分:0)

getJSON函数异步运行,因此在触发回调之前,alert(ipdata)正在运行。如果您在回调中移动了警报(ipdata),您会看到它打印了正确的IP地址。

答案 4 :(得分:0)

正如t.niese上面所述,在ipdata = data.ip之前将调用alert(ipdata),因为$ .getJSON是异步的。

您需要在回调中放置依赖于json响应的代码,或者您可以尝试定义一个单独的函数并在json回调中调用它:

$(document).ready(function () {

    var ipdata;
    var finishedJsonLoad = function() {
        alert(ipdata);
    };

    $.getJSON("http://jsonip.appspot.com?callback=?",
    function(data){
        ipdata=data.ip;
        alert( "Your ip: " + data.ip);
        finishedJsonLoad();

    });

});