Internet Explorer在启动AJAX调用时延迟

时间:2016-07-04 06:35:55

标签: javascript jquery ajax

我的jQuery在Firefox,Chrome和Opera中运行良好,但在Internet Explorer中,启动需要花费太多时间。

我已经阅读了很多文章并尝试尽可能快地编写代码,避免按类选择,foreach循环等等,但即使我发送了相对较快的"快速"要求它需要花费很多时间才能开始。例如:

function getDisturbanceData() {
    $body.addClass("loading");
    $.ajax({
        type: "POST",
        url: "Default.aspx/GetAllDisturbances",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: JSON.stringify({
            "itemsPerPage": itemsPerPage
        }),
        success: function (data) {
            CreateTable(data.d);
            $body.removeClass("loading");
        }
    });
};

以上$body.addClass("loading");开始前大约需要1秒钟。代码本身足够快,加载屏幕出现和创建表之间的时间不长于任何其他浏览器,但页面有点冻结,直到用户可以看到加载屏幕。我知道代码需要它的时间,直到它完成,因为我在这里加载了大量的数据(铬通常为1.4s),这就是加载屏幕的原因,但我无法解释之前的时间。

其他信息:我使用ASP.NET框架,webshim.polyfill用于Internet Explorer + Firefox支持。在默认的ASP.NET javascript文件旁边,我只导入了bootstrap.css/jsbootstrap-tokenfield.css/jsjquery-ui.css和标准jquery

我对Internet Explorer一无所知,或者我可以做些什么来加快速度。你能帮我试试吗?

当您需要其他信息时,如果您能够清楚地询问您的需求并描述我如何提供这些信息,那将非常友好,因为我从未遇到过这样的问题。

更新 问题可能在于在pageload上调用一次的这部分代码吗?它只检查c#backend中的Session变量并返回true或false,但它是async

function IsUserLogedIn(handleData) {
$.ajax({
    type: "POST",
    async: !1,
    url: "logon.aspx/IsUserLogedIn",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        handleData(data.d);
    }
});

}

Update2
我现在知道在Internet Explorer中减慢了我的页面速度,但我完全无能为力。这几行

<div id="logon_table">
    <asp:Label ID="lblName" runat="server" Font-Bold="true" Text="Name:"></asp:Label><br />
    <input type="text" ID="txtName" /><br /><br />
    <asp:Label ID="lblpwd" runat="server" Font-Bold="true" Text="Passwort:"></asp:Label><br />
    <input type="password" id="txtPassword"/><!--this element is the problem--><br /><br />
    <input type="button" ID="ButtonLogin" Value="Login" autofocus />
    <input type="button" ID="ButtonCancel" Value="Abbrechen"  />
</div>

放慢了我的网页速度。当我删除它们时,一切正常,即使没有任何css / js附加到这些元素每个交互延迟1秒。当我删除每个类和每个后台操作时,用户仍然必须等到他们点击链接。有人知道为什么吗?

1 个答案:

答案 0 :(得分:1)

我怀疑你的所有代码都在页面底部的某个$(document).ready()处理程序中,这意味着在浏览器通知DOM已完全加载之前,不会启动获取Ajax资源。

将这样的代码组织起来。在$(document).ready()之外:

function getDisturbanceData(itemsPerPage) {
    // don't use a POST request to GET data
    return $.ajax({
        type: "POST",
        url: "Default.aspx/GetAllDisturbances",
        dataType: "json",
        data: {
            itemsPerPage: itemsPerPage    // jQuery does the JSON serializing
        }                                 // (also think whether JSON is necessary to
    });                                   // deliver *a single* parameter)
}

$('body').addClass("loading");
var disturbanceData = getDisturbanceData(25);

现在,在常规$(document).ready()处理程序中:

disturbanceData.done(function (data) {
    CreateTable(data.d);
}).fail(function (jqXhr, status, error) {
    // show the error somewhere
}).always(function () {
    $('body').removeClass("loading");
});

这是加载Ajax资源的一般提示。尽快开始申请。然后使用the promise interface of jQuery Ajax requests处理文档加载时的结果。