0

我正在用jQuery的$ .ajax檢索JSONp文件。我無法弄清楚如何使下劃線循環工作......在成功underscore.js外面沒有數據_.each

我有這樣的代碼:

   success : function(response) { 

         var dataResp = ''; 
         _.each(response.results, function(response, index) { 

            var dataResp = response; 

            var prodName = dataResp.trackName; 
            var prodUri = dataResp.trackViewUrl; 
            var prodUri = dataResp.trackViewUrl; 
            var prodUri = dataResp.trackViewUrl; 
            var prodPrice = Math.round(dataResp.trackPrice); 
            var prodImg = dataResp.artworkUrl100.replace("100x100bb.", "700x700bb."); 

            console.log(prodName); // returns all product names, and that's fine 

         }, this); 

         console.log(dataResp); // dataResp is empty 


           var html = ""; 
           var compiled = _.template($("#product-structure").html(), dataResp); 

           _.each(dataResp, function(data) { // loop to compile template for all the elements inside the jsonp response 
            html += compiled(data); 
           }); 

           $('#data').html(html); // append to html the compiled template 


       } 

我用underscore.js爲模板的一部分,但我不能弄清楚,爲什麼我的數據不可用時_.each循環外...

這裏我的模板:

<script type="text/template" id="product-structure"> 
<%= data.img %> 
<%= data.title %> 
<%= data.price %> 
<%= data.uri %> 
</script> 

回答

0

您可以使用返回新數組的_.map函數。我假設你想要一個對象返回這些值。

此代碼將返回一個對象數組,每個對象將包含prodName,prodUri,prodPrice和prodImg。

var dataResp = _.map(response.results, function(response, index) { 
    return { 
     prodName: response.trackName, 
     prodUri: response.trackViewUrl, 
     prodPrice: Math.round(response.trackPrice), 
     prodImg: response.artworkUrl100.replace("100x100bb.", "700x700bb") 
    }; 
}, this); 
+0

謝謝。不知道映射。映射工程,但當我嘗試循環,然後追加#數據它附加1個對象,它是空的... –

+0

哇!沒關係,我已經發現錯誤是什麼。再次感謝你fayzaan! –

+0

好吧,很高興知道。沒問題。 – fayzaan

0

你必須使用var關鍵字的兩倍。在循環內部:

var dataResp = response;它創建一個名爲dataResp的新變量。由於變量具有js中的函數範圍,因此該變量僅存在於創建它的函數中。解決方法是將其切換到dataResp = response;而不使用var