2012-03-29 5 views
4

Ich benutze Jquery Ajax in meiner mobilen App, um meine Json-Daten über erholsame Apis zu holen. Meine erholsamen Apis wurden so konfiguriert, dass sie Etags unterstützen. Meine erholsamen apis werden in einer anderen Subdomain gehostet, daher habe ich CORS so konfiguriert, dass sie die domänenübergreifenden Anrufe abwickelt. In meiner Entwicklungsumgebung habe ich meine mobile App so konfiguriert, dass sie auf test.domain.com und die restliche API in test2.domain.com ausgeführt wird, sodass ich die domänenübergreifenden Aufrufe testen kann. All das funktioniert großartig! Meine Ajax-Aufrufe verhalten sich genau so, wie ich mit den etags erwarten:Warum füllt der jQuery-Ajax-Aufruf die Datenvariable nicht aus dem Cache, wenn ein 304-Statuscode abgerufen wird?

ein Anruf json Inhalt zu erhalten Fabrikat:

$.ajax({ 
    ifmodified: true, 
    .... 
    success: function(data){ 

    } 

ich einen Status 200 und die Datenvariablen in dem Erfolg Rückruf die Daten haben. Einen weiteren Aufruf an dieselbe Ressource machen (keine Änderungen erwarten) Ich bekomme einen Status 304 und die Datenvariable im Erfolgsrückruf hat die Daten (aus dem Cache geladen).

So weit so gut.

Wenn ich jetzt meine dev-Umgebung so konfiguriere, dass sowohl meine mobile App als auch meine restliche API auf der gleichen Domain sind, dann habe ich hier Probleme.

Ich bekomme einen Status 200 und die Datenvariable im Erfolgsrückruf hat die Daten. Einen weiteren Aufruf an dieselbe Ressource machen (keine Änderungen erwarten) Ich bekomme einen Status 304 und die Datenvariable in undefiniert !!!!

Irgendwelche Gedanken warum mit dieser Konfiguration jquery wird die Datenvariable nicht füllen mit was ist im Cache? Ich habe auch CORS und die crossdomain-Einstellung in meinem Ajax-Call entfernt, aber immer noch kein Glück. Ich benutze jquery 1.7.1.

+1

Überprüfen Sie, ob Sie etwas in der 'Complete' Rückruf im xhttpr -Argument (der erste Arg glaube ich), speziell nach' xhttpr.responseText 'hat es irgendetwas? – dennmat

+0

responseText kommt zurück als "" – bmurmistro

+0

Ich bin mir nicht sicher, wie viel Sie hier auf caching angewiesen sind, aber wenn die Anfrage nicht zu intensiv ist, können Sie immer die Option 'cache: false' hinzufügen (nur Sticks Müll am Ende der Anfrage (URL). Ich bin mir auch nicht sicher, ob die 'ifmodified'-Option das tut, was sie zu tun scheint: http://api.jquery.com/jQuery.ajax/ Vielleicht wird das Problem nur dadurch behoben, dass diese Option entfernt oder auf false gesetzt wird. Prost. – dennmat

Antwort

0

Standardmäßig werden Anfragen immer ausgegeben, aber der Browser kann Ergebnisse aus seinem Cache liefern. Um die Verwendung der zwischengespeicherten Ergebnisse zu verhindern, setzen Sie den Cache auf false. Um zu veranlassen, dass die Anforderung einen Fehler meldet, wenn das Asset seit der letzten Anforderung nicht geändert wurde, setzen Sie ifModified auf true.