2016-05-20 6 views
0

これについて私の頭を張ることはできません。同期AJAX呼び出しのデータをvarとコンソールログに保存しようとしていますが、同期呼び出しが終了する前に最後のコンソールログが実行されていますので、undefinedが返されます。同期AJAXコールのコンソールログデータ

コード:

$(document).ready(function() { 
    var longitude = 51.4543, 
     latitude = 0.9781, 
     apiKey = "", 
     result; 

    $.ajax({ 
    async: false, 
    url: "https://api.forecast.io/forecast/" + apiKey + "/" + longitude + "," + latitude, 
    dataType: "jsonp", 
    success: function(data) { 
     result = data; 
     //working 
     console.log(result); 
    }, 
    }); 
    //not working 
    console.log(result); 
}); 

私はJSが移動する前に終了する同期呼び出しを待つことになるが、私はそれがそうではありません推測している印象の下にありましたか?もしそうでなければ、どのようにグローバルレスポンスにgetレスポンスを格納して他の場所で使うことができますか?

+2

同期AJAX呼び出しがすべてのロジックに – Justinas

+1

行うには成功コールバックを使用して、廃止されました - @ OPを、あなたはそれをすべて知っている...問題は何ですか? – Rayon

+1

@TomBarton、 'callback'の使い方は? – Rayon

答えて

3

JSONPリクエストを作成しています。 JSONP と同時に実行できません。したがって、async: falseは無視されます。

非同期で動作するようにコードを再構成する必要があります。

他の関数がデータを取得するために使用できるものを返す必要がある場合は、約束を使用します。 $.ajaxは1を返します。

global_var = $.ajax(...); 
global_var.done(function (data) { console.log("Use some data", data); }); 
global_var.done(function (data) { console.log("Use some data again", data); }); 
1

だから短い答えは、あなたがグローバル変数にresultを格納することはできません、ノーです。どのような他の機能ほしいですの、このブロックの内側に行くためにresultニーズを使用します

function(data){ 
...here... 
}