2017-10-19 97 views
-1

我設置了這個for循環遍歷數組,以便我可以遍歷每個通道爲每個值獲取一個對象,但是當我分析代碼時,我得到一個錯誤,我不應該創建函數在一個循環內。有沒有更合適的方式來獲得這個功能,而不是在循環內創建函數?循環內的Ajax請求

這裏是對codepen鏈接:https://codepen.io/Na-Ya/pen/EwrOYY

$(document).ready(function(){ 

var channels = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"]; 

for (var i=0; i<channels.length; i++){ 

$.ajax({ 
method: "get", 
url:"https://wind-bow.gomix.me/twitch-api/streams/" + channels[i], 
dataType: "jsonp", 
success: function(data){  
// if statement for offline channels 
if (data.stream === null){ 

    //sets offlineName to the channel name 
    var offlineName = data._links.channel.replace("https://api.twitch.tv/kraken/channels/", "").toLowerCase(); 

    $("#offline").append("<div class='row'>" + "<div class='col m-2'>" + "<h3>" + offlineName + ": Offline" + "</h3>" + "</div>" + "</div>");  
} 
else if (data.stream.channel !== null){ 

var channelName = data.stream.channel.display_name; 
var channelStatus = data.stream.channel.status; 
var channelLogo= data.stream.channel.logo; 
var channelUrl = data.stream.channel.url; 
var channelGame = data.stream.channel.game; 
    $("#online").append("<div class='row'>" + "<div class='col'>" + "<img class='mx-auto' src='" + channelLogo + "' alt='Logo'>" + "<h3>" + channelName + "</h3>" + "<a href='" + channelUrl + "'>" + "<p>" + channelGame + ": " + channelStatus + "</p>" + "</a>" + "</div>" + "</div>");    
}   
}, //closes out success function 
}); //closes out ajax request 
};//closes out for loop 
}); //closes out document ready 
+0

的錯誤,我想你的意思是警告?如果你需要*在循環內部創建一個函數,那麼就執行它。如果你不這樣做,不要。在你的情況*不*這樣做就意味着在循環外定義你的ajax成功處理程序,這不會產生任何負面影響。 –

+0

對不起,我沒有收到警告。我試圖在循環外定義ajax成功函數,但是我陷入了困境,無法獲取數組中每個值的對象。 –

+0

這很不幸。 –

回答

0

在這種情況下,循環功能可以通過編寫它避免,因爲一個命名爲功能,外循環,並使用該名稱來指定作爲成功處理程序的功能:

$(document).ready(function() { 
    var channels = ...; 
    function successHandler(data) { 
     ... 
    } 
    for (var i=0; i<channels.length; i++) { 
     $.ajax({ 
      'method': 'get', 
      'url': 'https://wind-bow.gomix.me/twitch-api/streams/' + channels[i], 
      'dataType': 'jsonp', 
      'success': successHandler 
     }); 
    } 
}); 

這應該是一個問題。

此外,正如書面所述,sussess處理程序缺少無條件else,因此如果data.stream === nulldata.stream.channel === null,則不會構建/顯示HTML。這可能永遠不會發生,但你應該防守編程 - 總是假設最差。

考慮,而不是:

if (data.stream && data.stream.channel) { 
    // build HTML for the Channel 
} else { 
    // build HTML for offlineName 
}