2017-04-20 13 views
0

AJAX応答からデータを渡す必要があります。ここでは、コードです:それはOK働いて関数外のvarとしてAJAX応答を使用する

function getLocation() { 
    $.get('https://ipinfo.io/json', function (data) { 
     console.log(data); 
     $('.test').html('<h2>Your location is: ' + data.city + '.</h2>'); 
    }); 
} 
getLocation(); 

は、私は、この都市の温度を取得するために、私は他のAPIリクエストに渡すことができる変数としてdata.cityを使用したいです。私はjs/jQuery開発の初めにいるので、どんな助けもありがたいです。

+0

可能な重複http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -asynchronous-call) – Liam

答えて

1

あなたは単純に戻り値を使用することはできませんので、非同期コンテキストです。 1つの方法は、それぞれのコールバック関数を提供することによってアクションを連鎖させることです。

var self = this; 

function getLocation(callback) { 
    $.get('https://ipinfo.io/json', function (data) { 
     console.log(data); 
     $('.test').html('<h2>Your location is: ' + data.city + '.</h2>'); 
     callback.call(self, data.city); 
    }); 
} 

function getTemperature(location) { 
    //do another AJAX call here to get temperature and modify your DOM 
} 

getLocation(getTemperature); 
[私は非同期呼び出しからの応答を返すにはどうしますか?](の
+0

デニスに感謝します。それは魅力のように機能しますが、少し修正しました。私はvar self = thisを削除しました。 callback.call(this、data.city)を設定します。なぜグローバルな自己を必要としますか? – brx

+0

jQueryに渡すanonymous関数は、別のオブジェクトやクラスから後で呼び出されます。通常、そのオブジェクトはあなたの現在のコンテキストと同じコンテキストを持っていません。あなたの 'getTemperature()'関数が現在のコンテキストからいくつかのデータにアクセスする必要がある場合、あなたは困っているでしょう。現在のコンテキストを呼び出しにバインドするには、前に変数に代入します。あなたのケースでは、すべての変数と関数が現在のコンテキストで見つからない場合にピックアップされる最高のグローバル名前空間で定義されているので、正常に動作します。 – Dennis

0

これは非同期コールバックです。だから、あなたが後でそれを使用したい場合は、別のAJAX呼び出しのために、たとえば、あなたはあなたのコールバック内の次の呼び出しを行う必要があります

function getLocation() { 
    $.get('https://ipinfo.io/json', function (data) { 
     console.log(data); 
     $('.test').html('<h2>Your location is: ' + data.city + '.</h2>'); 

     // Use your data here for another AJAX call 
     $.get('https://example.com/test?city=' + data.city, function() {}); 
    }); 
} 
getLocation(); 

あなたにも、よりエレガントでより多くの非同期コードに対処するために、後の約束のために見えるかもしれません方法。 https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Global_Objects/Promise

関連する問題