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 版本)不会返回实现 Promise 接口的jqXHR 对象,这是 v1.5 引入的一个特性。when然后将对象视为普通值并立即解析。

要解决此问题,jq172.ajax()请改用,或使用(单个)最新的 jQuery 并更新您的旧代码。

于 2013-09-05T09:36:51.760 回答
0

这是来自jquery 网站

在多个 Deferred 的情况下,其中一个 Deferred 被拒绝,jQuery.when 立即为其主 Deferred 触发 failCallbacks。请注意,此时某些 Deferreds 可能仍未解决。如果您需要针对这种情况执行额外的处理,例如取消任何未完成的 ajax 请求,您可以在闭包中保留对底层 jqXHR 对象的引用,并在 failCallback 中检查/取消它们。

检查您的 ajax 调用并确保没有人被拒绝。
您可以在开发人员控制台-> 网络选项卡中执行此操作,
通常在按 F12 后即可访问。

于 2013-09-05T07:29:55.767 回答