2016-04-15 13 views
0

私はAPIの呼び出しから返された文字列を保持する準備ができて、次の変数いますなぜこれらのAJAX呼び出しで変数が更新されないのですか?

// Variables for the Twitch user's object 
    var tName = "tName"; 
    var tLogo = "tLogo"; 
    var tGame = "tGame"; 
    var tChannel = "tChannel"; 

は、その後、私はAJAX呼び出しを保持して、この機能を持っている:

function twitchInfo(user){ 
$.ajax({ 
    url: streams + user, 
    success: function(response){ 
    if (response.stream){ 
     tName = response.stream.channel.display_name; 
     tLogo = response.stream.channel.logo; 
     tGame = response.stream.game; 
     tChannel = response.stream.channel.status; 
    } else { 
     $.ajax({ 
     url: users + user, 
     success: function(data){ 
      tName = data.display_name; 
      if (data.logo) { 
      tLogo = data.logo} else {tLogo = defLogo} 
      tGame = "Offline"; 
      tChannel = " "; 
     } 
     }) 
    };   
    } 
}) 
}; 

機能から呼び出されています一連のユーザーを反復するループ。

私は呼び出しURLをチェックして、すべて正常にデータを返します。

私は変数を更新するためにajax呼び出しのデータを必要としましたが、console.log(tName + tLogo ....)を実行して調査すると、何も更新されていません。

誰でも理由を特定できますか?いかなる考えも認められるだろう。

おかげでその変数が宣言されている

編集

$(document).ready(function() { 

    //the Twitch accounts to include: 
    var twitchUsers = ["OgamingSC2", "ESL_SC2", "FreeCodeCamp", "storbeck", "brunofin", "comster404", "lastUser"]; 
    var defLogo = "https://cdn1.iconfinder.com/data/icons/user-experience/512/user-unknown-512.png"; 

    //Beginning of API call 
    var streams = "https://api.twitch.tv/kraken/streams/"; 
    var users = "https://api.twitch.tv/kraken/users/"; 

//Twitch user's object which will hold the info from the API calls. 
var AccInfo= {}; 

// Variables for the Twitch user's object 
var tName = "tName"; 
var tLogo = "tLogo"; 
var tGame = "tGame"; 
var tChannel = "tChannel"; 

//Object constructor 
function twitchUser(name, logo, game, channel){ 
this.name = name; 
this.logo = logo; 
this.game = game; 
this.channel = channel; 
} 

function twitchInfo(user){ 
$.ajax({ 
url: streams + user, 
    success: function(response){ 
    if (response.stream){ 
     tName = response.stream.channel.display_name; 
     tLogo = response.stream.channel.logo; 
     tGame = response.stream.game; 
     tChannel = response.stream.channel.status; 
    } else { 
     $.ajax({ 
     url: users + user, 
     success: function(data){ 
      tName = data.display_name; 
      if (data.logo) { 
      tLogo = data.logo} else {tLogo = defLogo} 
      tGame = "Offline"; 
      tChannel = " "; 
     } 
     }) 
    };   
    } 
    }) 
    }; 

    for (p=0; p<twitchUsers.length; p++){ 
    twitchInfo(twitchUsers[p]); 

$("#theTable").append("<tr><td class=\"theLogo\"><img src=" + AccInfo.logo + "></td><td class=\"user\"><a href=\"http://www.twitch.tv/" + AccInfo.name + "\">"+ AccInfo.name +"</td><td>"+ AccInfo.game + " " + AccInfo.channel + "</td></tr>"); 

console.log(twitchUsers[p] + " " + tName + " " + tLogo + " " + tGame + " " + tChannel + " "); 
    } 



}); 
+2

参照:範囲内http://stackoverflow.com/questions/13648995/how-to-grab-return-value-from-an-ajax-call –

+0

'console.log'ます、ので、 ajaxリクエストが成功する前の値を表示します。 –

+0

'console.log()'の呼び出しはどこで行われましたか? – Jasen

答えて

0

を? おそらく範囲外です。より完全なサンプルを提供できますか?

また、twitchInfo関数にコールバックを渡すこともできます。だから、代わりに、メソッド内の変数を更新する、あなただけの成功属性にコールバックを割り当てる:

function twitchInfo(user, callback){ 
    $.ajax({ 
     url: streams + user, 
     success: callback 
    }) 
}; 

と関数を呼び出すだけ更新する変数であることを確認することインライン関数を作成します

twitchInfo("some user", function(response) { 
    if (response.stream){ 
      tName = response.stream.channel.display_name; 
      tLogo = response.stream.channel.logo; 
      tGame = response.stream.game; 
      tChannel = response.stream.channel.status; 
     } else { 
      $.ajax({ 
      url: users + user, 
      success: function(data){ 
       tName = data.display_name; 
       if (data.logo) { 
       tLogo = data.logo} else {tLogo = defLogo} 
       tGame = "Offline"; 
       tChannel = " "; 
      } 
      }) 
    } 
); 
+0

私は私のオリジナルの質問に私の完全なjavascriptを追加しました。 $(document).ready(function(){}の中で変数が宣言されていることがわかります。私はあなたの提案にもインライン関数を作成しようとします。 – smithplusplus

+0

それは機能しましたか? – SanF

関連する問題