使用jquery ajax在一个页面上为许多实体加载数据的常用技术

时间:2012-10-02 06:36:50

标签: jquery

JS:

$('.product').each(function(){
    $parent = $(this);
    $.ajax({
        url: $parent.attr('url'),
        cache: false,
        dataType: 'text',
        success: function(data){       
            $parent.text(data);
        }
    });
});

对于每种产品,我想加载一些数据,比如价格。我知道each函数不适用于此,因为each不等待async ajax进程完成。

在我的例子中,只有最后一个产品充满了数据。

如何在文档加载时加载每个产品的数据?这种情况有共同的技术吗?是应该一次性要求所有产品还是另一个产品?

2 个答案:

答案 0 :(得分:1)

在javascript中创建一个包含所有产品ID的数组,然后在该数组的间隔内调用$ .ajax,在第一个ajax调用的finish事件上,检查数组中是否还有产品和再次触发ajax调用,直到数组为空。通过这种方式,您可以获得缓冲的产品,而无需并行进行ajax调用。

答案 1 :(得分:1)

原因:在您的代码中$parent未在本地声明,因此成为全局变量。因此,$('.product').each() { .. }的最后一次迭代会将其覆盖为DOM中的最后一个$('.product')元素。

解决方案:如果您将$parent = $(this);更改为var $parent = $(this);,则可能会开始正常运行。