2011-06-30 35 views
0
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 ip地址等於「未知」返回,然後執行一個jQuery的功能,設置ip地址的用戶的IP價值。然後我嘗試設置一個等於ipAddress值的表單元素。JavaScript的 - 集VAR等於將數據從一個功能

這不起作用。表單元素被設置爲「未知」。我不確定這是否是一個範圍問題?任何意見讚賞。

回答

1

發生什麼事是回調異步執行。 $.getJSON調用告訴瀏覽器「關閉並從該URL獲取數據;準備就緒後,調用我提供的函數」。該功能不會馬上執行。

您可以將更多邏輯移入回調中(即將ipAddress var內聯並分配給回調中的表單元素),也可以切換到更全功能的jQuery.ajax方法並將async:false傳遞給選項集。當然,在所有情況下,您都會在通話的其他部分執行之前等待網絡。

0

將設置值的代碼放入的回調中。

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

這條線:

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

ipAddress得到正確的值設置之前執行。嘗試將該行移入回調方法。

0

也許你有異步的問題。

爲什麼你不修改json回調函數裏面的元素?

1

這是應該如何進行返工:

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

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

$ .getJSON只是使用$阿賈克斯的快捷方式。所以它是異步的。在jSON回調中使用document.getElementById('callbackForm')...。