2012-08-14 8 views
6

Meine Website wird mit Ext JS 4.1 Framework und ASP .Net MVC v3 erstellt. Wenn ein neuer Frame gerendert wird, gibt es 19 separate AJAX-Anfragen zum Abrufen von Daten im JSON-Format. Alle Anfragen sind vertraut und wurden von Ext.Ajax.request() gemacht. Beispiel:request.xhr undefined in 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); 
     ... 
    } 
}); 

In einigen Fällen gibt es Fehler in ext-all.js in

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

wo Anfrage kein Eigentum xhr hat, so dass request.xhr.readyState Ausnahme auslöst „Eigenschaft nicht lesen kann‚Readstate 'von undefiniert'. Diese Fehler werden nicht für alle Anfragen angezeigt und wirken sich nicht auf die Site aus (Antworten werden erfolgreich abgerufen). Manchmal erscheinen diese Fehler gar nicht. Timeout für alle Anfragen ist standardmäßig auf 30s eingestellt und sie dauern jeweils etwa 1,5-2 Sekunden. Ich benutze Google Chrome 21. Könnten Sie mir bitte eine Idee geben, warum es passiert.

+0

Das ist wirklich verdrahtet ist. Wenn Sie sich die Registerkarte "Netzwerk/XHR" in den Chrome-Entwicklertools ansehen, sind Sie 100% sicher, dass alle URLs gültig sind, alle Serveraufrufe ohne Ausnahme zurückgegeben werden und alle Antworten mit den richtigen Daten zurückgegeben werden? – Izhaki

+0

Die meisten Browser haben eine Obergrenze von ~ 6 gleichzeitigen Anfragen pro Domain. Wenn Sie alle 19 Anfragen auf einmal senden, könnten die Dinge außer Kontrolle geraten. Können Sie versuchen, die Anzahl der Anfragen manuell zu drosseln? Sagen Sie, warten Sie bis 6, bevor Sie die nächsten 6 senden? Nicht sicher, ob das das Problem lösen wird, aber es ist ein Anfang. – Eric

+0

@Izhaki, Die Webentwicklungstools zeigen, dass alle URLs korrekt waren und die Antworten nach maximal 1,5 Sekunden abgerufen wurden. Seltsame Sache ist, dass nur 1 Zeit von 7 solchen Fehler gibt. Andere sind normal. –

Antwort

2

Das Problem scheint genau dann aufzutreten, wenn Sie einen Haltepunkt oder einen "Debugger" haben. Linie in irgendetwas mit AJAX verwandt. Bei mir ist es in Chrome passiert, habe noch keine anderen Browser ausprobiert.

In meinem Fall passierte es, wenn ich einen Haltepunkt in einem Load-Event-Handler für ein Geschäft wie Codebeispiel unten gesetzt hatte.

Der Fehler tritt jedoch auf, wenn Sie einen Haltepunkt innerhalb der Funktion Ext onStateChange auch im Framework selbst setzen.

Wenn Sie Ihre Breakpoints deaktivieren und debugger; aufrufen, können Sie den Fehler ignorieren.

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