2011-06-30 5 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 ipAddressを 'unknown'に設定し、ipAddressの値をユーザーのipに設定するjquery関数を実行します。次に、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

それを実行します。ipAddressが正しい値に設定される前に

document.getElementById('callbackForm').elements["callback_form.ipAddress"].value = 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')...を使用します。

関連する問題