2008-09-24 56 views
8

对于主要浏览器实现,您可以在XMLHttpRequest的send方法中使用的字符串数据的长度是否有文档记录的最大长度?XMLHttpRequest上的send()数据参数的最大长度Post

我遇到了一个JavaScript XMLHttpRequest的问题当数据超过3k时,FireFox 3发布失败。我假设邮政的行为与传统的邮政表现一样。

W3C文档提到send方法的数据参数是DOMString,但我不确定主要浏览器如何实现该方法。

这里是我的JavaScript的简化版本,如果bigText超过约3K失败,否则它的工作原理...

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

回答

5

我相信最大长度不能只依赖于浏览器,而且还Web服务器。例如,Apache HTTP服务器有一个LimitRequestBody directive,它允许任何地方从0字节到2GB的数据。

2

根据XMLRPC spec,唯一真正的限制是整数和双倍的大小。

2

您不指定它如何失败,但是您的编码不正确。你应该使用encodeURIComponent而不是encodeURI。

默认情况下,客户端上请求实体主体的最大大小可能仅受可用内存的限制。已经指出的服务器可能会拒绝超过一定大小的实体主体。例如,IIS 6和7具有200KB的默认限制。