2008-09-24 15 views
8

क्या आपके ब्राउज़र अनुप्रयोग कार्यान्वयन के लिए XMLHttpRequest की प्रेषण विधि में उपयोग किए जा रहे स्ट्रिंग डेटा की लंबाई तक एक दस्तावेज अधिकतम है?XMLHttpRequest पोस्ट पर प्रेषण() डेटा पैरामीटर की अधिकतम लंबाई

मैं एक जावास्क्रिप्ट XMLHttpRequest पोस्ट के साथ किसी समस्या में भाग रहा हूं जब फ़ायरफ़ॉक्स 3 में विफल रहता है जब डेटा लगभग 3k से अधिक होता है। मैं मान रहा था कि पोस्ट एक पारंपरिक फॉर्म पोस्ट के समान व्यवहार करेगा।

डब्ल्यू 3 सी दस्तावेज़ों का उल्लेख है कि प्रेषण विधि का डेटा पैराम एक डोमस्ट्रिंग है लेकिन मुझे यकीन नहीं है कि प्रमुख ब्राउज़र इसे कैसे कार्यान्वित करते हैं।

यहाँ मेरी जावास्क्रिप्ट का एक सरलीकृत संस्करण है, अगर 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

मेरा मानना ​​है कि अधिकतम लंबाई केवल ब्राउज़र पर नहीं निर्भर करता है, लेकिन यह भी पर वेब सर्वर। उदाहरण के लिए, अपाचे HTTP सर्वर में LimitRequestBody directive है जो 0 बाइट्स से 2 जीबी के डेटा तक कहीं भी अनुमति देता है।

2

XMLRPC spec के अनुसार, केवल वास्तविक सीमाएं पूर्णांक और युगल के आकार पर हैं।

2

आप यह निर्दिष्ट नहीं करते कि यह कैसे विफल रहता है हालांकि आपका एन्कोडिंग गलत है। आपको encodeURIComponent का उपयोग encodeURI नहीं करना चाहिए।

डिफ़ॉल्ट पर अनुरोध इकाई निकाय का अधिकतम आकार संभवतः उपलब्ध स्मृति द्वारा सीमित है। सर्वर जैसा कि पहले से ही इंगित किया गया है, एक निश्चित आकार पर इकाई निकायों को अस्वीकार कर सकता है। उदाहरण के लिए आईआईएस 6 और 7 में 200 केबी डिफ़ॉल्ट सीमा है।

संबंधित मुद्दे