2008-10-14 7 views
6

मैं छोटी परियोजनाओं में पुनः प्रयोज्यता के लिए सिर्फ एक छोटा अजाक्स ढांचा लिख ​​रहा हूं और मैंने एक समस्या आई है। मूल रूप से मुझे अनुरोध भेजते समय 'NS_ERROR_ILLEGAL_VALUE' त्रुटि मिलती है और मुझे नहीं पता कि क्या हो रहा है।अजाक्स का उपयोग कर 'NS_ERROR_ILLEGAL_VALUE' त्रुटि को कैसे प्राप्त करें?

<?php 
$XML = <<< PROLOG 
<?xml version="1.0" encoding="iso-8859-1"?> 
PROLOG; 

$XML .= "<results>"; 
    $XML .= "<result>"; 
     $XML .= "<FirstName>Gary</FirstName>"; 
     $XML .= "<SecondName>Willoughby</SecondName>"; 
     $XML .= "<Age>35</Age>"; 
    $XML .= "</result>"; 
    $XML .= "<result>"; 
     $XML .= "<FirstName>Sara</FirstName>"; 
     $XML .= "<SecondName>Gostick</SecondName>"; 
     $XML .= "<Age>35</Age>"; 
    $XML .= "</result>"; 
$XML .= "</results>"; 

header("Content-Type: text/xml"); 
echo $XML; 
?> 

पूर्ण त्रुटि:

uncaught exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIXMLHttpRequest.open]" nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)" location: "JS frame :: http://www.kalekold.net/ajax/ :: AjaxRequest :: line 63" data: no] 

Line 0 

मैं बस नहीं देख सकते हैं

HTML पेज

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>Ajax Test</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

     <script type="text/javascript"> 

      var COMPLETE = 4; 
      var OK = 200; 

      function GetXMLHttpRequestObject() 
      { 
       var XMLHttpRequestObject = false; 

       if(window.XMLHttpRequest) 
       { 
        if(typeof XMLHttpRequest != 'undefined') 
        { 
         try 
         { 
          XMLHttpRequestObject = new XMLHttpRequest(); 
         } 
         catch (e) 
         { 
          XMLHttpRequestObject = false; 
         } 
        } 
       } 
       else if (window.ActiveXObject) 
       { 
        try 
        { 
         XMLHttpRequestObject = new ActiveXObject('Msxml2.XMLHTTP'); 
        } 
        catch (e) 
        { 
         try 
         { 
          XMLHttpRequestObject = new ActiveXObject('Microsoft.XMLHTTP'); 
         } 
         catch (e) 
         { 
          XMLHttpRequestObject = false; 
         } 
        } 
       } 
       else 
       { 
        XMLHttpRequestObject = false; 
       } 
       return XMLHttpRequestObject; 
      } 

      //The Main Ajax Object 
      function AjaxRequest(p_RequestMethod, p_DestinationURL) 
      { 
       this.XMLHttpRequestObject = GetXMLHttpRequestObject(); 

       this.RequestedMethod = p_RequestMethod; 
       this.DestinationURL = p_DestinationURL; 

       this.XMLHttpRequestObject.open(this.RequestMethod, this.DestinationURL); 

       this.OnStateChange = function(Callback) 
       { 
        this.XMLHttpRequestObject.onreadystatechange = Callback; 
       } 

       this.Send = function(p_Content) 
       { 
        this.XMLHttpRequestObject.send(p_Content); 
       } 

       this.GetState() 
       { 
        return this.XMLHttpRequestObject.readyState; 
       } 

       this.GetResponseText = function() 
       { 
        return this.XMLHttpRequestObject.responseText; 
       } 

       this.GetResponseStatus = function() 
       { 
        return this.XMLHttpRequestObject.status; 
       } 

       this.GetResponseStatusText = function() 
       { 
        return this.XMLHttpRequestObject.statusText; 
       } 
      } 

      var Request; 

      function GetData() 
      { 
       Request = new AjaxRequest('POST', 'http://www.kalekold.net/ajax/Ajax.php'); 
       Request.OnStateChange = StateChange; 
       Request.Send(); 
      } 

      function StateChange() 
      { 
       window.alert("State: " + Request.GetState()); 
       window.alert("Response: " + Request.GetResponseStatus()); 
       window.alert("Response Text: " + Request.GetResponseStatusText()); 

       if(Request.GetState() == COMPLETE && Request.GetResponseStatus() == OK) 
       { 
        Result = Request.GetResponseText(); 
        window.alert(Result); 
       } 
      } 
     </script> 

    </head> 
    <body> 
     <form> 
      <textarea name="TextArea" rows="10" cols="80"></textarea><br /> 
      <input type="button" value="Load" onClick="GetData();"> 
     </form> 
    </body> 
</html> 

पीएचपी फ़ाइल (छंटनी लेकिन त्रुटि दिखाता है) जहां यह गलत हो रहा है, कोई विचार?

उत्तर

6

अपवाद "घटक लौटा विफलता कोड: 0x80070057 (NS_ERROR_ILLEGAL_VALUE)" खुली विधि के कॉल में अवैध मूल्य पारित होने के कारण होता है।

अपने कोड के माध्यम से देख रहे हैं मैं गलत वर्तनी पाया:

 
this.RequestedMethod = p_RequestMethod; 
this.DestinationURL = p_DestinationURL; 

this.XMLHttpRequestObject.open(this.RequestMethod, this.DestinationURL); 

this.RequestedMethod देखें संपत्ति p_RequestMethod करने के लिए सेट और "खुला" विधि के कॉल में पारित किया जा रहा this.RequestMethod।

इसके अलावा, बजाय अपने खुद के आवरण बनाने के बजाय, मैं खुले स्रोत XMLHttpRequest.js का उपयोग कर की सिफारिश करेंगे - मानक अनुरूप क्रॉस-ब्राउज़र XMLHttpRequest ऑब्जेक्ट कार्यान्वयन, वह भी ब्राउज़र की देशी XMLHttpRequest ऑब्जेक्ट कार्यान्वयन के कुछ 20 बग ठीक करता है।

+0

धन्यवाद मैं एक नज़र डालेगा। मैं एक और ढांचे का उपयोग करने जा रहा हूं लेकिन मैं अपने सीखने के अनुभव के रूप में अपना खुद का रोल करूंगा। उपरोक्त कोड मुख्य स्रोत का केवल एक संयुक्त स्निपेट है। समस्या की तलाश करते समय मैं थक गया था। फिर से धन्यवाद। –

+0

तो, क्या आपने गलत वर्तनी सही की? –

+0

हाँ, वर्तनी समस्या थी। –

1

यह त्रुटि संदेश फ़ायरफ़ॉक्स के XMLHttpRequest ऑब्जेक्ट के 'quirks' में से एक है। आईई में एक ही मुद्दे के अलग-अलग लक्षण होंगे।

अब आप इन सभी quirks से निपटना नहीं चाहते हैं कि वहां बहुत अच्छी पुस्तकालय हैं।

उदाहरण के लिए नेटस्केप और एफएक्स कॉलिंग XMLHttpRequestObject.responseText या XMLHttpRequestObject.status किसी भी कनेक्शन समस्याओं के लिए "NS _..." त्रुटि फेंकता है। आईई इसके बजाए ओएस नेटवर्क त्रुटि कोड लौटाएगा - कोई त्रुटि नहीं फेंक दी गई है। यदि आप इसे स्वयं संभालते हैं तो आपको दोनों के लिए त्रुटि प्रबंधन में निर्माण करना होगा।

मैं jQuery की अनुशंसा करता हूं। Prototype भी उत्कृष्ट है।

+0

मैं अब अजाक्स के लिए jQuery का उपयोग करता हूं। यह बहुत बढ़िया है। –

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

  • कोई संबंधित समस्या नहीं^_^