0

data.ip値を ipdata 変数に格納したい。

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

});
4

5 に答える 5

2

ipdata=data.ip;ajax 呼び出しのコールバック メソッド内で割り当てているため、期待どおりに動作しません。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);
        }); 
    });

});
于 2013-04-28T12:54:14.340 に答える
1

非同期に AJAX A を使用しています。$.getJson 関数が終了する前にアラート (ipdata) が評価されます。いずれかの Synchronus リクエストを使用して、jquery defferend の使用方法を学習します。

のようなもの(テストされていません)

$.getJSON("http://jsonip.appspot.com?callback=?",
    function(data){
        ipdata=data.ip;
        alert( "Your ip: " + data.ip);  
    }); 
}).done(function (){
    alert(ipdata);
});
于 2013-04-28T12:54:24.740 に答える
0

getJSON 関数は非同期で実行されているため、コールバックが起動される前に alert(ipdata) が実行されています。alert(ipdata) をコールバック内に移動すると、適切な IP アドレスが表示されることがわかります。

于 2013-04-28T12:54:52.883 に答える
0

$.getJSON非同期です -

ipdata=data.ip;
alert( "Your ip: " + data.ip);

それが更新されなかっalert(ipdata); た理由ですipdata

この質問を見ることができます - https://stackoverflow.com/questions/1632039/return-value-from-ajax-call

于 2013-04-28T12:54:30.193 に答える