Warum funktioniert das jQuery-Ajax-call nicht NUR im IE9 (Noch funktioniert im IE8 und IE7)
Habe ich eine website, wo ich eine ajax-Aufruf wie dieser:
//perform an ajax request to generate a new subscriber account
jQuery.ajax({
type: 'POST',
url: '/index.php?option=com_content&view=article&id=45&tmpl=component',
data: postVars,
success: handleResponse,
error: function(jqXHR, textStatus, errorThrown) {
alert ('response: ' + jqXHR.responseText);
alert ('code: ' + jqXHR.getResponseHeader('X-Subscriber-Status'));
}
});
Die Seite angefordert wird, die nichts tut, aber die Rückkehr einer einzigen Ziffer status-code, und es funktioniert mit jedem browser, außer dem IE9. Das Skript gehostet wird, die auf der gleichen Domäne wie die Seite, die es anfordert, so sollte es keine Problem mit cross-domain-scripting.
Habe ich endlich aufgespürt, was passiert, aber ich weiß nicht, wie es zu lösen ist. Es stellt sich heraus, dass der Ajax-request erfolgreich abgeschlossen ohne Probleme. Ich habe überprüft dies mithilfe von Fiddler suchen, die den Datenverkehr im Netzwerk. Der server antwortet auf die Anfrage mit einem HTTP-status-code-200 und der Körper ist nicht alles enthalten, aber eine einzelne Ziffer response-code. An dieser Stelle jQuery führt den Fehler-handler, NICHT den Erfolg-handler wie erwartet werden würde (im IE9). Warum macht er das und wie kann ich es verhindern?? Dies geschieht NUR im IE9. Selbst IE8 und IE7 funktioniert das gut mit der exakt gleichen code! Wie Sie sehen können, dass ich endlich gegriffen, um die Erkennung von IE9 und mit einem XmlHttpRequest-Objekt, um es zu tun (das funktioniert übrigens).
Wie es scheint, ein jQuery bug zu mir, aber ich kann nicht finden jede Erwähnung der es in meine Suche. Bin ich wirklich der einzige, der das erleben dieses sonderbare Verhalten?
Ja, der Ajax-request nicht scheitern. Es ist einfach nicht exectued im IE9.
Die separate Logik wurde Hinzugefügt, nachdem die Tatsache zu, das problem zu beheben. Ich habe geändert, die original-Beitrag widerspiegeln, den code habe ich mit dem begonnen, scheitert im IE9 aber kein anderer Browser.
Haben Sie ein Unicode Byte Order Mark am Anfang der index.php Datei zufällig?
InformationsquelleAutor rushinge | 2011-08-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun habe ich endlich aufgespürt das problem. Es stellt sich heraus, dass aus irgendeinem Grund, jQuery/IE nicht richtig urlencode doppelten Anführungszeichen. Die URL der Anfrage war:
/suchen.json?callback=jQuery16105234487927080267_1313510362362&q=Aktien-ODER "Börse" -Blaupause -empireavenue.com -lernen&_=1313510362469
In jedem anderen browser durch die Zeit, jQuery, der ajax-Anfrage durchgeführt, es sah aus wie:
/search.json?callback=jQuery16105234487927080267_1313510362362&q=stocks%20OR%20%22stock%20market%22%20-blueprint%20-empireavenue.com%20-learn&_=1313510362469
aber aus welchem Grund auch immer in allen Versionen von Internet Explorer, es kam heraus wie diese:
/search.json?callback=jQuery16105234487927080267_1313510362362&q=stocks%20OR%20"stock%20market"%20-blueprint%20-empireavenue.com%20-learn&_=1313510362469
sodass der server keine Daten zurückgeben.
InformationsquelleAutor rushinge
Sind Sie sicher, dass die URL, die Sie aufrufen (
/index.php?option=com_content&view=article&id=45&tmpl=component
) funktioniert im IE9? Wenn Sie laden, PHP Seite in IE9 funktioniert es wieder das erwartete Ergebnis? Sollte es tun, aber es lohnt sich zu prüfen, dass der Fehler in der jQuery-Aufruf, anstatt die PHP.Auch, ein POST-Aufruf würde in der Regel zu einer Seite, wie 'index.php" mit der query-string (
option=com_content
,view=article
etc.) gesendet wird die variablepostVars
.Versuchen Sie, die folgenden:
Streifen nach unten die Funktion der grundlegenden Teile, und Sie sollten in der Lage sein zu sehen, wo der Fehler herkommt.
Ich habe versucht, mit deinem code auf jsfiddle.net (jsfiddle.net/chris5marsh/equkA/2) und es scheint einwandfrei zu funktionieren. Obwohl Sie haben eine
meta
tag in derhead
mit den folgenden:<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
Dies kann eine Lösung für die Zeit - es weist im Grunde die Seite für den IE7, die Sie gesagt haben, die funktioniert für Ihren code. Hoffe, das hilft.InformationsquelleAutor chris5marsh