Internet Explorer, Ajax Request: Max URL Length

Es hat mich nur einen Tag gekostet, also eine Kleinigkeit:

Betrifft Prototype 1.5.1.1 mit Internet Explorer 6.0.irgendwas und Ajax.Updater, bzw. alles was mit dem Ajax.Reqest von Prototype zu tun hat.

Die maximale Länge der URL beträgt 2050 Zeichen.

Ich habe ein Formular mit Serialize() aus Prototype als Querystring aufbereitet und wollte das per Ajax per HTTP-Get verschicken, das funktionierte mit richtigen Browsern auch Problemfrei, nicht aber im Internet Explorer. Der weigerte sich beharrlich und kommentarlos. Ich konnte zwischendurch mal den Response-Status “122” aus ihm herauskitzeln, mehr nicht. Mit kürzen URLs funktioniert es:


var fieldcontents = $('form-id').serialize();
new Ajax.Updater({ success: 'target_div', failure: 'msg_div'}, 'index.php?' + fieldcontents, { method: 'get' })

Hätte ich das gewusst, hätte ich gleich Post verwendet und mir einen Tag Arbeit gespart:

$('form-id').request({ onComplete: function(transport){ $('target_div').update(transport.responseText); } });

Danke Microsoft.

3 Responses to “Internet Explorer, Ajax Request: Max URL Length”

  1. Werner Says:

    Hallo.

    Das klingt nach einem IE-Fehler, den ich jetzt schon seit Tagen vor mir herschiebe ;).
    Ein Formular mit einer gehörigen Portion Select- und Inputfeldern erzeugt bei Request
    einen Javascriptfehler “Unbekannter Name” und beim zweiten Aufruf “Unbekannter Fehler” exakt beim Abschicken des Requests: ergebnis_xml.open(“POST”,url,true);
    Verzichte ich auf sagen wir mal die Hälfte der Elemente, läuft alles normal. Und ich verwende schon POST.
    Firefox und Netscape ohnehin keine Probleme. Hast Du eine Idee?

    /Werner

  2. Stefan Says:

    Ob es ein Fehler vom IE ist, sei dahingestellt.

    Ich vermute mehr dass Microsoft damit irgendeinen Fehler oder eine andere Injection verhindern möchte die bei längeren URL’s auftreten kann, und diese nicht vernünftig abfangen möchte, und diesen Fehler einfach durch die Übernahme einer bestimmten, verkürzten Länge des Strings verhindert.

    Man kann den Entwicklern schließlich nicht nur Willkür entgegenwerfen, sondern muß ihnen auch mal zugestehen, dass sie etwas absichtlich getan haben, auch wenn dies nicht der richtige Weg ist. Das ist eben der Unterschied zwischen OpenSource und CloseSoftware.

    Fraglich ist da nur warum Microsoft, die doch sonst überall klauen, sich nicht einmal einen richtigen Browser als gutes Beispiel ansehen. Wahrscheinlich müßten sie dann zuviel an der Struktur ihres eigenes Systems ändern.

  3. emaN Says:

    Stefan,

    erst eine Vermutung, die man mangels ClosedSoftware nicht prüfen kann. Dann auf der Vermutung und dem immer gängigen “Open vs. Closed Software” aufbauend eine grandiose Schlußfolgerung ziehen: Microsoft klaut überall ujhnd ist auch sonst absolut evil.

    Aus Dir wird bestimmt mal ein großartiger Rhetoriker, aber mit Sicherheit kein exakt denkender und schlüssig vorgehender Developer, Wissenschaftler, etc.

    *kopfschüttelnd*
    eman