1

私はおそらく非常に明白な何かを見逃しているかもしれませんが、私はこの問題でどこにも行きません。

jsonフィードから値を取得した後、変数の値を設定しようとするのは簡単です。

jqueryを使用してjsonpフィードを取得し、後で使用できる変数に値を格納していますが、機能せず、値が格納されません。console.logの値を返すと、値が返されます。

jQuery(document).ready(function($){
    serverip = "<?php echo $_SERVER['SERVER_ADDR']; ?>";
    stream_domain = "";

    $.ajax({url: 'http://load.cache.is/inspired.php?ip=' + serverip, dataType:'jsonp',
      success:  function(data){
        $.each(data, function(key, val) {
            if (key == serverip){
               stream_domain = val;
               console.log("val: " + val);
            }
        });
      }
    });

    console.log(stream_domain);
});

これがjsfiddle.netの同じコードです

4

2 に答える 2

2

ajax呼び出しは非同期であるため、イベントのタイムラインは次のとおりです。

  1. ajax呼び出しを行う
  2. console.log
  3. ajax呼び出しの成功、変数の割り当て

変数を使用する前に、成功イベントを待ちます。更新されたjsFiddleは、成功コールバック関数で呼び出される関数を追加したものです。

    function continueWorking(){            
        console.log(stream_domain);
        $("<span>" + stream_domain + "</span>").appendTo(".variable");
    }
于 2012-10-26T13:45:49.110 に答える
2

非同期リクエストを行っています。したがって、HTMLを追加するコードは、成功する前に実行され、変数が割り当てられます。

ajaxリクエストに続くコードは、リクエストが行われた直後に実行されます。したがって、応答データが必要な場合は、次のような成功メソッドから実行する追加コードを移動する必要があります。

if (key == serverip){
    stream_domain = val;
    console.log("val: " + val);
    $("<span>" + val + "</span>").appendTo(".json");
    $("<span>" + stream_domain + "</span>").appendTo(".variable");
}

デモ

于 2012-10-26T13:46:00.373 に答える