Gary Willoughby Gary Willoughby - 4 days ago 6
Ajax Question

How to get around a 'NS_ERROR_ILLEGAL_VALUE' error using Ajax?

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?

Answer

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:

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

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

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.

Comments