我想在更新变量中存储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);
});
});
答案 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();
});
});