2013-04-28 90 views
0

我想將data.ip值存儲在ipdata變量中。無法將函數值存儲在變量中

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

}); 
+2

'getJSON'是異步,完整的回調在alert(ipdata);'執行後調用。 – 2013-04-28 12:53:32

+0

那麼我怎樣才能得到IP地址的客戶端 – user2302288 2013-04-28 12:58:25

回答

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

}); 
+0

那麼如何獲得客戶端的IP地址 – user2302288 2013-04-28 12:57:46

+0

你是否想將IP地址存儲在全局變量中供以後使用> – 2013-04-28 12:59:29

1

您正在使用AJAX一種asynchronus內完成。 alert(ipdata)在$ .getJson函數完成前被評估!要麼使用Synchronus請求瞭解如何使用jquery defferend。

喜歡的東西(未測試)

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

getJSON函數異步運行,因此alert(ipdata)在引發回調之前運行。如果您在回調中移動警報(ipdata),您會看到它打印了正確的IP地址。

0

正如t.niese上面所說,alert(ipdata)將在ipdata = data.ip之前被調用,因爲$ .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(); 

    }); 

});