request.xhr在Ext JS中未定义

时间:2012-08-14 09:58:29

标签: ajax xmlhttprequest extjs4.1 readystate

我的网站是使用Ext JS 4.1框架和ASP .Net MVC v3制作的。呈现新帧时,有19个单独的AJAX请求用于以JSON格式检索数据。所有请求都是Ext.Ajax.request()所熟悉的。例如:

Ext.Ajax.request({
    url: getOrderLink,
    method: "GET",
    params: { recId: orderRecId },
    headers: {
        'Accept': 'application/json'
    },
    success: function (response) {
        var order = Ext.decode(response.responseText);
        ...
    }
});

在某些情况下,

中的ext-all.js存在错误
onStateChange : function(request) {
    if (request.xhr.readyState == 4) {
        this.clearTimeout(request);
        this.onComplete(request);
        this.cleanup(request);
    }
},

其中request没有属性xhr,因此request.xhr.readyState抛出异常“无法读取未定义的属性'readState'”。 此错误不会出现在所有请求中,也不会影响站点工作(成功检索响应)。有时这些错误根本不会出现。默认情况下,所有请求的超时设置为30秒,每个请求大约需要1.5-2秒。 我使用的是Google Chrome 21。 你能不能让我知道为什么会这样。

1 个答案:

答案 0 :(得分:2)

当且仅当您有断点或“调试器”时,似乎会出现问题;与AJAX相关的任何内容。对我而言,它发生在Chrome中,尚未尝试其他浏览器。

在我的情况下,当我在下面的代码示例的商店的加载事件处理程序中设置断点时,就发生了这种情况。

但是如果你在框架本身的Ext onStateChange函数中设置一个断点,则会发生错误。

如果禁用断点和debugger;调用会删除错误,您可以放心地忽略它!

There is a similar thread on ExtJS forums. Sencha might add a fix.

Ext.define('MyApp.controller.MyController', {
    extend: 'Ext.app.Controller',

    stores: ['Projects'],

    init: function () {
        this.getProjectsStore().addListener(
            "load",
            this.onProjectsStoreLoaded,
            this
        );
    },

    onProjectsStoreLoaded: function () {
        console.log('MyController: onProjectsStoreLoaded');

        debugger; // <- this causes the errors to appear in the console

        SomeOtherThingsIWantedToDebug();
    }
}