在 Ext JS 中未定义 request.xhr

Posted

技术标签:

【中文标题】在 Ext JS 中未定义 request.xhr【英文标题】:request.xhr undefined in Ext JS 【发布时间】:2012-08-14 09:58:29 【问题描述】:

我的网站是使用 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);
    
,

其中请求没有属性 xhr,因此 request.xhr.readyState 会引发异常“无法读取未定义的属性‘readState’”。 并非所有请求都会出现此错误,并且不会影响站点工作(成功检索响应)。有时这个错误根本不会出现。所有请求的超时默认设置为 30 秒,每个请求大约需要 1.5-2 秒。 我正在使用谷歌浏览器 21。 你能告诉我为什么会这样吗?

【问题讨论】:

这真的是有线的。如果您查看 Chrome 开发者工具的 Network/XHR 选项卡,您是否 100% 确定所有 url 都是有效的,所有服务器调用都毫无例外地返回,并且所有响应都返回正确的数据? 大多数浏览器的上限为每个域约 6 个并发请求。如果您同时发送所有 19 个请求,事情可能会失控。您可以尝试手动限制请求数量吗?说,等待 6 完成后再发送下一个 6?不确定这是否能解决问题,但这是一个开始。 @Izhaki,Web 开发人员工具显示所有 URL 都是正确的,并且最长在 1.5 秒后检索到响应。奇怪的是,只有 1 次 7 给出了这样的错误。其他正常。 @Eric Cook,现在请求总数为 14。有时他们都成功了。现在几乎所有这些都没有 XHR 错误。 【参考方案1】:

当且仅当您有断点或“调试器”时,才会出现问题;加入与 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();
    

【讨论】:

以上是关于在 Ext JS 中未定义 request.xhr的主要内容,如果未能解决你的问题,请参考以下文章

将 EXTJS 4.1 升级到 4.2... _incr_ 在 Ext.util.Observable 中未定义

Sequelize 错误:在 Index.js 中未定义 defineCall

错误:- $http 在 Angular JS 中未定义

当不应该在 discord.js 命令处理程序中未定义时,无法读取未定义的属性

fetch not working 结果在 Node.js 中未定义

Leaflet.js 中未显示自定义 Mapbox 瓦片集