1

すべてのレポート グラフを表示する必要がある印刷ページを開発しています。

顧客ごとにグラフの数は異なります。そのため、次のように、利用可能なグラフごとに jquery スクリプトを作成しています。

buildJQs: function () {

        $(".emailgraphs").each(function () {
            YAHOO.Report.Print("Email", $(this).attr("responsefield"), $(this).attr("id"), $(this).attr("metricid"))
        });
    },

Print: function (name, graphid, divid, metricid) {

        try {
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: m_oReport.ds,
                async: false,
                timeout: 300,
                data: JSON.stringify(m_oReport.printp(name, graphid, metricid)),
                beforeSend: function () {
                    //Displays loading image before request send, till we get response.
                    //$("#" + divId).addClass("loading");
                },
                cache: false,
                success: function (data) {
                    // if they define a success function (s), call it and return data to it.
                    if (typeof m_oReport.prints === "function") {
                        //$("#" + divId).removeClass("loading");

                        m_oReport.prints(data, divid, name, metricid)
                    }
                },
                error: function (err) {
                    $("#" + divid).html(err);
                }
            });
        }
        catch (err) { alert("catch"); }
    }

問題は、コントローラーから問題なくデータが返されますが、jqplot に割り当てている間、データが空になります。これは非同期の ajax 呼び出しによるものだと思います。async: false と timeout で試しましたが、まだ問題に直面しています。

これを処理する方法はありますか??

前もって感謝します...

4

1 に答える 1

1

jquery deferredでこれを試してください:

buildJQs: function () {

    var deferreds = [], deferred;
    $(".emailgraphs").each(function () {

        deferred = YAHOO.Report.Print("Email", $(this).attr("responsefield"), $(this).attr("id"), $(this).attr("metricid")); 
        deferreds.push(deferred);
     });

     $.when.apply(null, deferreds).done(function() {
         alert('all done');
     });
},

Print: function (name, graphid, divid, metricid) {

        try {
           return $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: m_oReport.ds,
                //async: false, <- remove, this is a problem
                timeout: 300,
                data: JSON.stringify(m_oReport.printp(name, graphid, metricid)),
                beforeSend: function () {
                    //Displays loading image before request send, till we get response.
                    //$("#" + divId).addClass("loading");
                },
                cache: false,
                success: function (data) {
                    // if they define a success function (s), call it and return data to it.
                    if (typeof m_oReport.prints === "function") {
                        //$("#" + divId).removeClass("loading");

                        m_oReport.prints(data, divid, name, metricid)
                    }
                },
                error: function (err) {
                    $("#" + divid).html(err);
                }
            });

        }
        catch (err) { alert("catch"); }
        return null; 
    }
于 2013-09-05T13:58:08.260 に答える