0

我有一个仪表板页面,并且正在使用 jQuery 通过一个 ajax 调用来更新每个图形。

如果它使用 async:false 运行 AJAX,那么一切正常,但显然很慢,因为调用是一个接一个地进行的。

当我运行 async:true 时,查询会执行,但它们都输出到同一个元素并相互覆盖。

如何确保成功和错误函数中的 jQuery 选择器仍然指向它们的原始目标,而不是全部指向最终框?

我的代码:

//update sparklines on dashboard page
        $(".convobox7").each(function() {
            id = $(this).attr('id');
            $("#convobox-7-"+id).prepend("<img src='img/ajax_loader.gif'/>");
            $.ajaxQueue({
                url: '_ajax/getFunnelReport',
                type: "POST",
                dataType: "json",
                async: true,
                data: {funnel:$(this).attr('id'), dimension:'date'},
                timeout: 50000,
                success: function(json) { 
                    var data = json;
                    if (data.success=='true') {
                        $("#convobox-7-"+id).html(data.htmlconv+"<br/><small>Past week</small>");
                        gebo_peity.init();
                    }

                },
                error: function(x, t, m) {
                    $("#convobox-7-"+id).html("");
                }
            })
        });

注意我在这里使用了 ajaxQueue 插件,但是没有它也会发生同样的事情。

4

3 回答 3

2

您需要本地化id

var id = $(this).attr('id');

可能还有其他问题需要解决,但这是肯定的。

编辑

试试这个 :

$(".convobox7").each(function() {
    var id = $(this).attr('id');
    var $el = $("#convobox-7-"+id).prepend("<img src='img/ajax_loader.gif'/>");
    $.ajaxQueue({
        url: '_ajax/getFunnelReport',
        type: "POST",
        dataType: "json",
        data: {funnel:id, dimension:'date'},
        timeout: 50000,
        success: function(data) {
            if (data.success == 'true') {
                $el.html(data.htmlconv+"<br/><small>Past week</small>");
                gebo_peity.init();
            }
        },
        error: function(x, t, m) {
            $el.html("");
        }
    });
});
于 2013-02-25T22:01:11.327 回答
1

这与函数闭包有关,因为您在成功/错误函数之外声明了变量。更好的方法是在错误/成功函数中使用 $(this) 引用,而不是在处理程序之外分配它。

编辑:在 ajaxQueue 的错误/成功处理程序的上下文中,我不确定 $(this) 指的是什么,您可能需要导航到父元素。我没有立即看到任何明确的文档。这是我对 javascript 文档最大的不满之一,$(this) 有时不是你想的那样,也没有记录:/

于 2013-02-25T21:52:28.950 回答
0

愚蠢的问题,但是由于您已经将元素 ID 发送到服务,它是否有理由无法将其发送回?那么您可以简单地将其用作选择器,确保您拥有所需的项目。

于 2013-02-25T21:50:51.177 回答