0

ダッシュボード ページがあり、jQuery を使用して各グラフを 1 回の 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 のドキュメントに対する私の最大の不満の 1 つです。

于 2013-02-25T21:52:28.950 に答える
0

ばかげた質問ですが、すでに要素 ID をサービスに送信しているため、返送できない理由はありますか? 次に、それをセレクターとして使用するだけで、必要なアイテムがあることを確認できます。

于 2013-02-25T21:50:51.177 に答える