【问题标题】:Internet Explorer 9 randomly not entering the jQuery Ajax done callbackInternet Explorer 9 随机不进入 jQuery Ajax done 回调
【发布时间】:2016-06-22 11:05:49
【问题描述】:

我在一个项目中使用 Typescript 和 jQuery ajax。在其中一个应用程序页面(类似于仪表板)中,我有 15 个网格,每个网格都有 WebApi 调用和一些额外的调用来呈现一些组合框。除此之外,在我的应用程序标题中,我还有其他组件正在为用户和其他一些组合框请求数据。最后,当我加载该特定页面时,ajax 调用的数量将达到 24

在 Chrome、Mozilla 和 IE >= 10 上一切正常。 在 IE9 中,有时会发生来自这 24 个的一个特定调用不进入 ajax done 回调。这个电话没有什么特别的。在网络中,它的请求是从后端返回的 status 200 ,所以它应该进入回调。收到的 JSON 是有效的,ajax 调用每次都是一样的,只是表现不同。

如果我删除所有其他调用并只留下有问题的调用,则问题不再发生。

IE9是否存在短时间内ajax调用次数的问题?

我正在使用 Typescript,我发出请求的函数如下。

public Request(controllerActionName: string, method: string, data?: Object, headersData?: Object, countRequest: boolean = true) {
        let dataType = "json";
        let headers = _.extend({ "accept": "application/json; odata=verbose" }, headersData);

        if (method === "DELETE") {
            dataType = "";
        }

        if (BaseWebApi.asyncRequestCount === 0 && countRequest) {
            PubSub.publishSync(OsiIDs.NotifyAsyncOperation, true);
        }
        console.log(controllerActionName + "/" + method + "  ---- prevCount: " + BaseWebApi.asyncRequestCount + "  ---- nextCount: " + (BaseWebApi.asyncRequestCount + 1));
        countRequest && BaseWebApi.asyncRequestCount++;
        let response = $.ajax({
            url: this.module + controllerActionName,
            method: method,
            headers: headers,
            contentType: (method.toLowerCase() === "get" ? "" : "application/json"),
            dataType: dataType,
            data: (method.toLowerCase() === "get" ? data : JSON.stringify(data))
        });

        response.done(() => {
            if (BaseWebApi.asyncRequestCount === 1 && countRequest) {
                PubSub.publishSync(OsiIDs.NotifyAsyncOperation, false);
            }
            console.log(controllerActionName + "/" + method + "  ---- prevCount: " + BaseWebApi.asyncRequestCount + "  ---- nextCount: " + (BaseWebApi.asyncRequestCount - 1));
            countRequest && BaseWebApi.asyncRequestCount--;
        }).fail((data, code, message) => {
            if (BaseWebApi.asyncRequestCount === 1 && countRequest) {
                PubSub.publishSync(OsiIDs.NotifyAsyncOperation, false);
            }
            console.log(controllerActionName + "/" + method + "  ---- prevCount: " + BaseWebApi.asyncRequestCount + "  ---- nextCount: " + (BaseWebApi.asyncRequestCount - 1));
            countRequest && BaseWebApi.asyncRequestCount--;
        });

        return response;
    }

绑定 ajax 调用会解决这个问题吗?

谢谢

【问题讨论】:

    标签: jquery ajax callback internet-explorer-9


    【解决方案1】:

    似乎 IE9 在等待服务器响应时有默认超时。 所以服务器返回了响应,但是没有调用 ajax done 回调。

    在进行 ajax 调用时指定更大的 timeout 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      相关资源
      最近更新 更多