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的值。
这不起作用。表单元素被设置为“未知”。我不确定这是否是一个范围问题?任何建议表示赞赏。
答案 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')...