0

私のプロジェクトでは、2 つのバージョンの JQuery.js を使用$.noConflict()しているため、最新バージョンの JQuery を jq172 という名前の変数に使用して競合を解決しました。jq172.when().done()すべての ajax リクエストが完全に処理されるまで、コンストラクトを使用して読み込みステータス イメージを表示しました。コードは次のとおりです。

jq172.when(
    DisplayPOXOrderStatistics(fromDate, toDate), 
    DisplayPOXCompletedOrdersData(fromDate, toDate),
    DisplayPOXCompletedOrderPieChart(fromDate, toDate),
    DisplayCurrentYearlyTrends())
      .done(function (a1,a2,a3,a4) 
        { 
           $("#loading").hide(); 
        });

の関数はjq172.when()次のようにコーディングされます。

 function DisplayPOXOrderStatistics(fromDate, toDate) {        
    return $.ajax({
        type: "POST",
        url: '@Url.Action("DisplayPOXOrderStatistics", "Home")',
        dataType: "json",
        data: { FromDate: fromDate, ToDate: toDate },
        success: function (data) {application code.....}
    });        
}
function DisplayPOXCompletedOrdersData(fromDate, toDate) {
    return $.ajax({
        type: "POST",
        url: '@Url.Action("DisplayPOXCompletedOrders", "Home")',
        data: { FromDate: fromDate, ToDate: toDate },
        dataType: "json",
        success: function (data) { some code....}
    });
    }

& rest 2 関数は上記と同じ方法でコーディングされています。.done()読み込みイメージ ダイブを非表示にするコードは、4 つの ajax 呼び出しがすべて終了した後に実行する必要がありますが、現在は関数呼び出しがディスパッチされた直後に実行されます。誰でも私のコードの問題を理解できますか。前もって感謝します...

これがrest 2関数の定義です..

function DisplayPOXCompletedOrderPieChart(fromDate, toDate) {
    return $.ajax({
        type: "POST",
        url: '@Url.Action("POXCompletedOrderPieChart", "Home")',
        data: { FromDate: fromDate, ToDate: toDate },
        dataType: "json",
        success: function (data) {
            $('#POXCompletedOrdersPie').empty();
            var dataSet = [];
            var isDataAvailable = false;
            for (var i = 0; i < data.length ; i++) {
                var newElement = { label: data[i].Name, data: parseFloat(data[i].ColumnValue), color: Color[i] };
                dataSet.push(newElement);
                if (newElement.data > 0)
                    isDataAvailable = true;
            }
            if (dataSet.length != 0 && isDataAvailable) {
                $.plot($("#POXCompletedOrdersPie"), dataSet, {
                    series: {
                        pie: {
                            show: true
                        }
                    },
                    legend: {
                        show: false
                    }
                });
            }
            else {
                $("#POXCompletedOrdersPie").empty();
                $("#POXCompletedOrdersPie").append("<html><p> <b>" + "@Html.Raw(VirtuOxAdvDME.Dashboard_PieChart_POXCompletedOrder_NoData)" + "</b> </p><html>");
            }
        }
    });        
}

function DisplayCurrentYearlyTrends() {
    $("#DisplayCurrentYear").html($('#selectCurrentYear option:selected').text());
    return $.ajax({
        url: '@Url.Action("DisplayCurrentYearlyTrends", "Home")',
        data: { selectedCurrentYear: $('#selectCurrentYear option:selected').text() },
        type: 'POST',
        dataType: 'json',
        success: function (data) {
            var DataValues = [], TickData = [];
            var i = undefined;
            $.each(data, function (index, item) {
                i = (index + 1) * 2;
                DataValues.push({ data: [i, item.Value], color: Color[i] });
                DataValues.push([i, item.Value]);
                TickData.push([i, item.MonthName]);
            });
            $.plot($("#CurrentYearlyTrendsBar"), [{ data: DataValues, color: "#3D69AA" }],
                    {
                        series: { bars: { show: true } },
                        bars: {
                            barWidth: 1.5,
                            align: "center"
                        },
                        xaxis: {
                            ticks: TickData,
                            axisLabelUseCanvas: true,
                            labelAngle: -90,
                        },
                        yaxis: { axisLabelUseCanvas: true },
                        grid: { hoverable: true }
                    });
            $("#CurrentYearlyTrendsBar").UseTooltip();
        }
    });        
}
4

2 に答える 2

1

おそらく、$.ajax(古い jQuery バージョンからの) 呼び出しは、v1.5 で導入された機能である Promise インターフェイスを実装するjqXHR オブジェクトを返しません。whenその場合、オブジェクトをプレーンな値として認識し、すぐに解決します。

これを修正するには、jq172.ajax()代わりに使用するか、(単一の) 最新の jQuery を使用してレガシー コードを更新します。

于 2013-09-05T09:36:51.760 に答える
0

これはjqueryサイトからのものです

Deferred の 1 つが拒否される複数の Deferred の場合、jQuery.when はすぐにそのマスター Deferred の failCallback を起動します。Deferred の一部は、その時点でまだ解決されていない可能性があることに注意してください。この場合、未完了の ajax リクエストをキャンセルするなど、追加の処理を実行する必要がある場合は、基礎となる jqXHR オブジェクトへの参照をクロージャーに保持し、failCallback でそれらを検査/キャンセルできます。

ajax 呼び出しをチェックして、誰も拒否されていないことを確認してください。
開発者コンソールでこれを行うことができます->
通常、F12を押すとネットワークタブにアクセスできるようになります。

于 2013-09-05T07:29:55.767 に答える