Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用Jquery Ajax成功方法太早?_Javascript_Jquery_Ajax_Knockout.js - Fatal编程技术网

Javascript 调用Jquery Ajax成功方法太早?

Javascript 调用Jquery Ajax成功方法太早?,javascript,jquery,ajax,knockout.js,Javascript,Jquery,Ajax,Knockout.js,我有一系列敲除组件,它们执行几个ajax调用返回服务器以获取数据。其中许多组件继承相同的javascript基类。在测试期间,我注意到这些ajax调用偶尔会捕获不正确的数据 我在浏览器控制台中的$.ajax成功方法中设置了一个断点,我注意到有时甚至在网络选项卡表示调用已完成返回数据之前,此成功方法就会触发。当我查看返回的数据时,它为我提供了当前页面的源,而不是查询的url。此页面一次执行40-50个ajax调用,但每个控件处理自己的加载 这似乎是完全随机发生的,如果我在页面上多次放置同一控件,通

我有一系列敲除组件,它们执行几个ajax调用返回服务器以获取数据。其中许多组件继承相同的javascript基类。在测试期间,我注意到这些ajax调用偶尔会捕获不正确的数据

我在浏览器控制台中的
$.ajax
成功方法中设置了一个断点,我注意到有时甚至在网络选项卡表示调用已完成返回数据之前,此成功方法就会触发。当我查看返回的数据时,它为我提供了当前页面的源,而不是查询的url。此页面一次执行40-50个ajax调用,但每个控件处理自己的加载

这似乎是完全随机发生的,如果我在页面上多次放置同一控件,通常会有几个控件成功加载,而其他控件则不会。以下是我所拥有的:

this.Update = function () {
        this.updateParameters();
        $.ajax({
            type: "POST",
            traditional: true,
            url: this.ajax_location,
            data: this.ajax_parameters,
            success: function (data) {
                this.seriesDataItems = new Array();
                var that = this;
                if (data.MonthlyTotals) {
                    data.MonthlyTotals.forEach(function (e, i, a) {
                        that.seriesDataItems.push([e.Item1, (+e.Item2.toFixed(2))]);  // stupid Tuple serialization...
                    });
                }
                if (data.Total) this.visitCount(this.magicRegex(+data.Total.toFixed(2)));
                this.posNeg(data.PercentYTD > 0 ? "fa fa-arrow-circle-down" : "fa fa-arrow-circle-up");
                this.percentage(Math.round(Math.abs(data.PercentYTD * 100)) + "%");
                this.seriesData(this.seriesDataItems);
            }.bind(this),
            error: function (returndata) {
                alert("Error:\n" + returndata.responseText);
            }
        });
    };

每页40-50个AJAX调用听起来太过分了。您确定您的服务器正在处理所有这些错误吗?您是否已禁用AJAX请求上的缓存?不幸的是,这是管理层希望使用的设计决策。该页面是一个包含大约30个小部件的仪表板。每个小部件可以包含几个较小的组件。他们希望每个小部件都是完全自包含和可重用的,这样它就可以进行自己的ajax调用。调用和查询之间的重叠非常小,因此更改设计范例仍然需要相当大的viewmodel。此外,我还没有禁用ajax调用上的缓存,但在每个页面加载上数据似乎都是准确的(当它实际上在调用成功处理程序之前等待请求完成时).我不确定,但可能有一个限制,限制了您可以同时执行的Ajax请求的数量。你可能想考虑排队Ajax请求。这是一个明显的问题,但是这种“腐败”是否发生在所有浏览器中,你测试过其他浏览器吗?每页40-50 Ajax调用听起来难以置信的过分。您确定您的服务器正在处理所有这些错误吗?您是否已禁用AJAX请求上的缓存?不幸的是,这是管理层希望使用的设计决策。该页面是一个包含大约30个小部件的仪表板。每个小部件可以包含几个较小的组件。他们希望每个小部件都是完全自包含和可重用的,这样它就可以进行自己的ajax调用。调用和查询之间的重叠非常小,因此更改设计范例仍然需要相当大的viewmodel。此外,我还没有禁用ajax调用上的缓存,但在每个页面加载上数据似乎都是准确的(当它实际上在调用成功处理程序之前等待请求完成时).我不确定,但可能有一个限制,限制了您可以同时执行的Ajax请求的数量。您可能需要考虑排队Ajax请求。这是一个明显的问题,但是这种“腐败”是否发生在所有浏览器中,您测试过其他浏览器吗?