2008-09-24 4 views
8

Gibt es eine dokumentierte Max auf die Länge der Zeichenfolge Daten, die Sie in der send-Methode eines XMLHttpRequest für die wichtigsten Browser-Implementierungen verwenden können?Maximale Länge von send() Datenparam auf XMLHttpRequest Beitrag

Ich stoße auf ein Problem mit einem JavaScript XMLHttpRequest Post in FireFox 3 fehlgeschlagen, wenn die Daten über ca. 3k ist. Ich ging davon aus, dass sich die Post genauso verhalten würde wie ein herkömmlicher Form Post.

Die W3C-Dokumentation erwähnt den Datenparameter der send-Methode ist ein DOMString, aber ich bin mir nicht sicher, wie die wichtigsten Browser das implementieren.

Hier ist eine vereinfachte Version meiner JavaScript, wenn bigText über etwa 3k ist es nicht, sonst funktioniert es ...

var xhReq = createXMLHttpRequest(); 

function createXMLHttpRequest() { 
    try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {} 
    try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} 
    try { return new XMLHttpRequest(); } catch(e) {} 
    alert("XMLHttpRequest not supported"); 
    return null; 
} 

function mySubmit(id, bigText) { 
    var url = "SubmitPost.cfm"; 
    var params = "id=" + id + "&bigtext=" + encodeURI(bigText); 

    xhReq.open("POST", url, true); 

    //Send the header information along with the request 
    xhReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xhReq.setRequestHeader("Content-length", params.length); 
    xhReq.setRequestHeader("Connection", "close"); 

    xhReq.onreadystatechange = onPostSubmit; 
    xhReq.send(params); 
} 

function onPostSubmit() { 

    if (xhReq.readyState==4 || xhReq.readyState=="complete") 
    { 
    if (xhReq.status != 200) 
     { 
     alert('BadStatus'); 
     return; 
     } 
    } 
} 

Antwort

5

ich die maximale Länge nur glauben nicht auf dem Browser abhängig, sondern auch von der Webserver. Zum Beispiel hat der Apache HTTP-Server eine LimitRequestBody directive, die Daten zwischen 0 und 2GB Daten erlaubt.

2

Nach der XMLRPC spec, sind die einzigen realen Grenzen auf die Größe von ganzen Zahlen und verdoppelt.

2

Sie geben nicht an, wie es scheitert, aber Ihre Codierung ist falsch. Sie sollten encodeURIComponent nicht encodeURI verwenden.

Standardmäßig ist die maximale Größe des Entitätshauptteils auf dem Client wahrscheinlich nur durch den verfügbaren Speicher begrenzt. Der Server, auf den bereits hingewiesen wurde, kann Entitätskörper ab einer bestimmten Größe ablehnen. IIS 6 und 7 zum Beispiel haben eine 200 KB Standard-Grenze.