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

相关问题