2008-09-24 439 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的默認限制。