Im just writing a small Ajax framework for re-usability in small projects and i’ve hit a problem. Basically i get a ‘NS_ERROR_ILLEGAL_VALUE‘ error while sending the request and i’ve no idea what is happening.
The HTML Page (trimmed but shows the error)
<!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>
The PHP File:
<?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; ?>
The full error:
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
I just can’t see where it’s going wrong, any ideas?
The exception ‘Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE)’ is caused by an illegal value being passed into the call of open method.
Looking through your code I found misspelling:
See this.RequestedMethod property set to p_RequestMethod and this.RequestMethod being passed into the call of ‘open’ method.
Also, instead of creating your own wrapper, I would recommend using open-source XMLHttpRequest.js – Standard-compliant cross-browser XMLHttpRequest object implementation, that also fixes some 20 bugs of browser’s native XMLHttpRequest object implementations.