开发者问题收集

如何解决此 jQuery .each() 循环中的“未定义”?

2015-07-24
2408

我正在使用 Shopatron API,以下大部分代码均采用其示例。需要注意的是,我正在使用其 API 库进行调用,从这个角度来看,它正在连接和工作。我已按需要输出所有内容,但额外的产品图像除外,因为当我尝试循环遍历数组中的图像 .each() 时发生“未定义”错误,因此无法输出。

作为参考,以下是我正在 Shopatron 中为产品“拉”的 console.log(data); 的屏幕截图。

在此处输入图像描述

我添加了一些红色箭头来指出我感兴趣的内容。我主要想循环遍历该图像数组,以便输出其他图像。下面您可以看到我试图在 .each(); 循环中获取 URL,但它却给了我 undefined

现在,我的函数和 .each(); 循环内部有一个 console.log(this.url); ,因此它只隔离了该图像数组。

在此处输入图像描述

如您所见,我获取到了 URL,这很好。但是当我尝试使用它来附加 img 标签时,我也得到了 undefined ,然后输出了这样的结果。

现在我将向您展示我用来完成所有这些操作的代码。还有很多其他函数正在调用产品选项、价格和垃圾,您可以在第一个屏幕截图中看到。所有这些都在工作。我只在图像方面遇到了麻烦,所以我将它隔离到那个函数上。

var partNumber = '<?php echo $productID; ?>';
        $(document).ready(function() {
            Shopatron.getProduct({
                partNumber: partNumber
            },{
                success: function(p) {
                    outputProductName(p);
                    outputProductImage(p); // Here's the function up here
                    outputProductPrice(p);
                    outputDescription(p);
                    outputSpecs(p);
                },
                templateFriendly : false                                
            }
        );



        function outputProductImage(data) {

        var target = '#shopatron_product_image';
        var clickFunction = 
        $('#shopatron_product_image').html('<img src="' + data.image + '">');

        // Here's my loop that is giving me undefined...                                                        
        $(data.images).each(function() {

        $('#shopatron_additional_images').append("<li><a href='" + this.url + "' onclick=\"swapImage('#shopatron_product_image', '" + this.url + "'); return false;\"><img src='" + this.url + "'></a></li>");

        });

        return;
        }

这是我得到的 kicks 输出的控制台屏幕截图。

在此处输入图像描述

感谢您的建议和帮助。

2个回答

我相信这是因为 data.images 不是 dom 元素,而您正尝试从中创建 jQuery 对象。

而不是:

$(data.images).each(function() {

    $('#shopatron_additional_images').append("<li><a href='" + this.url + "' onclick=\"swapImage('#shopatron_product_image', '" + this.url + "'); return false;\"><img src='" + this.url + "'></a></li>");

});

尝试:

$.each(data.images, function(i, image){
   $('#shopatron_additional_images').append("<li><a href='" + image.url + "' onclick=\"swapImage('#shopatron_product_image', '" + image.url + "'); return false;\"><img src='" + image.url + "'></a></li>");
})

这是 jQuery 用于数组和对象的通用迭代器。

aquint
2015-07-24

我真的很感谢所有努力帮助我解决这个问题的人。结果发现这是 Shopatron 方面的错误。当然,这并没有产生可见的错误,更像是他们的数据库没有更新。他们的建议是使用标准管理仪表板简单地将图片重新添加到产品项目中,没什么特别的。它解决了这个问题。这不完全是一个先进的解决方案,但也许如果其他人遇到这种情况,它会有所帮助。

SpatialAnomaly
2015-10-24