javascript - set var等于函数返回的数据

时间:2011-06-30 21:11:19

标签: javascript jquery

var ipAddress="unknown";
$.getJSON('http://jsonip.appspot.com/?callback=?',
function(data){
ipAddress=data.ip;});


document.getElementById('callbackForm').elements["callback_form.ipAddress"].value = ipAddress;

此javascript代码将var ipAddress设置为“unknown”,然后执行jquery函数,将ipAddress的值设置为用户的ip。然后我尝试将表单元素设置为等于ipAddress的值。

这不起作用。表单元素被设置为“未知”。我不确定这是否是一个范围问题?任何建议表示赞赏。

7 个答案:

答案 0 :(得分:1)

正在发生的是回调是异步执行的。 $.getJSON调用告诉浏览器“关闭并从此URL获取数据;当它准备就绪时,调用我提供的函数”。该功能不会马上执行。

您可以将更多逻辑移动到回调中(即内联ipAddress var并将其分配给回调中的表单元素),或者切换到功能更全面的jQuery.ajax方法并传递async:false在选项集中。当然,在所有情况下,您将在执行其余调用之前等待网络。

答案 1 :(得分:1)

异步JavaScript和XML(ajax)是异步(即使它不涉及XML)。

回调函数在HTTP响应到达时执行

其余代码只是立即运行 - 即在响应到来之前

如果您想对所请求的数据执行任何操作在回调中执行此操作

var ipAddress="unknown";
$.getJSON('http://jsonip.appspot.com/?callback=?',function(data){
    ipAddress=data.ip;
    document.getElementById('callbackForm').elements["callback_form.ipAddress"].value = ipAddress;
});

答案 2 :(得分:1)

这是应该如何重做的:

$.getJSON('http://jsonip.appspot.com/?callback=?', function(data){
    setIPAddress(data.ip);
});

function setIPAddress(ip){
  document.getElementById('callbackForm').elements["callback_form.ipAddress"].value = ip;
}

答案 3 :(得分:0)

将设置值的代码置于回调中。

答案 4 :(得分:0)

这一行:

document.getElementById('callbackForm').elements["callback_form.ipAddress"].value = ipAddress;

在使用正确的值设置ipAddress之前执行。尝试将该行移动到回调方法中。

答案 5 :(得分:0)

也许你有异步问题。

为什么不修改json回调函数中的元素?

答案 6 :(得分:0)

$ .getJSON只是使用$ .ajax的一种捷径。所以它是异步的。在jSON回调中使用document.getElementById('callbackForm')...