2012-08-14 19 views
6

mi sitio web se crea utilizando el marco Ext JS 4.1 y ASP .Net MVC v3. Cuando se procesa un nuevo fotograma, hay 19 solicitudes separadas de AJAX para recuperar datos en formato JSON. Todas las solicitudes son familiares y están hechas por Ext.Ajax.request(). Ejemplo:request.xhr undefined en 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); 
     ... 
    } 
}); 

En algunos casos hay errores en ext-all.js en

onStateChange : function(request) { 
    if (request.xhr.readyState == 4) { 
     this.clearTimeout(request); 
     this.onComplete(request); 
     this.cleanup(request); 
    } 
}, 

donde solicitud no tiene ninguna propiedad para que xhr request.xhr.readyState lanza excepción "No se puede leer la propiedad 'READSTATE 'de indefinido' Estos errores no aparecen para todas las solicitudes y no afectan el trabajo del sitio (las respuestas se recuperan correctamente). Algunas veces estos errores no aparecen en absoluto. El tiempo de espera para todas las solicitudes se establece en 30 segundos por defecto y demoran entre 1,5 y 2 segundos cada una. Estoy usando Google Chrome 21. ¿Podría darme alguna idea de por qué está sucediendo?

+0

Esto es realmente conectado. Si miras la pestaña Red/XHR de las Herramientas para Desarrolladores de Chrome, ¿estás 100% seguro de que todas las URL son válidas, que todas las llamadas al servidor regresan sin excepción y que todas las respuestas regresan con los datos correctos? – Izhaki

+0

La mayoría de los navegadores tienen un límite superior de ~ 6 solicitudes concurrentes por dominio. Si está enviando las 19 solicitudes de una vez, las cosas podrían salirse de control. ¿Puedes intentar limitar manualmente el número de solicitudes? Diga, espere que 6 finalicen antes de enviar los próximos 6? No estoy seguro si eso resolverá el problema, pero es un comienzo. – Eric

+0

@Izhaki, las Herramientas para desarrolladores web muestran que todas las URL fueron correctas y que las respuestas se recuperaron después de 1,5 segundos como máximo. Lo extraño es que solo 1 vez de 7 da ese error. Otros son normales. –

Respuesta

2

El problema parece ocurrir si y solo si tiene un punto de interrupción o un "depurador"; línea en todo lo relacionado con AJAX. Para mí sucedió en Chrome, aún no he probado otros navegadores.

En mi caso sucedió cuando establecí un punto de interrupción en un controlador de eventos de carga para un ejemplo de código de tienda como el de abajo.

Pero el error ocurre si establece un punto de interrupción dentro de la función Ext onStateChange también en el marco.

Si deshabilita sus puntos de interrupción y debugger; llamadas elimina el error, puede ignorarlo con seguridad.

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