2012-08-14 33 views
6

我的网站是使用Ext JS 4.1框架和ASP .Net MVC v3制作的。当呈现新框架时,有19个单独的AJAX请求用于检索JSON格式的数据。所有请求都很熟悉,并由Ext.Ajax.request()完成。例如:request.xhr在Ext JS中未定义

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. 您能否介绍一下为什么会发生这种情况。

+0

这真是连线。如果您查看Chrome开发人员工具的网络/ XHR标签,您是否100%确定所有网址都有效,所有服务器调用都毫无例外地返回,并且所有响应都返回正确的数据? – Izhaki 2012-08-15 00:58:47

+0

大多数浏览器具有每个域约6个并发请求的上限。如果你一次发送所有19个请求,事情可能会失控。你可以尝试手动限制请求数量吗?说,发送下一个6之前等待6完成?不知道这是否能解决问题,但这是一个开始。 – Eric 2012-08-22 17:20:50

+0

@Izhaki,Web开发者工具显示所有的URL都是正确的,并且在1.5秒之后获取最大响应。奇怪的是,只有7次的1次给出了这样的错误。其他是正常的。 – 2012-08-27 13:38:40

回答

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(); 
    } 
}