これは推奨される方法ではありませんが、同期Ajax呼び出しを実行すると、問題が認識されたときに解決するはずです。
ip = null;
$.ajax({
url: 'http://jsonip.appspot.com/',
async: false,
dataType: 'json',
contentType: 'application/j-son;charset=UTF-8',
success: function (data) {
ip = data.ip
alert(ip);
}
});
alert(ip);
繰り返しになりますが、同期Ajax( Asynchronous Javascript And Xmlの略)の実行は不規則であり、Ajaxの目的をやや損なうため、これは推奨されないことを強く強調します。ただし、そのデータが返されるのをWebアプリで待機する必要がある場合は、この方法で機能するはずです。私はそれをいじくりまわしますが、URLはjsfiddleからのリクエストを許可していません。
実行を継続するための応答に依存しないようにアプリをコーディングできれば、より良いでしょう。たとえば、Ajax応答が正常に返された後に関数を呼び出した場合、次のようになります。
ip = null;
$.ajax({
url: 'http://jsonip.appspot.com/',
dataType: 'json',
contentType: 'application/j-son;charset=UTF-8',
success: function (data) {
ip = data.ip
alert(ip);
gotAjaxResponse()
}
});
function gotAjaxResponse() {
alert(ip);
}
まだグローバル変数を使用していることに注意してくださいip
(これは別の悪い習慣ですが、そのスピーチは別の日のために保存します=)、少なくとも、そのデータを持つことに依存するコードに進む前に、応答を待っています。
さらに、2番目の例ではまだジェネリック$.ajax()
を使用していることに注意してください。を使用せずにasync: false
、メソッドを使用できます$.getJSON()
。