PDA

View Full Version : Resolved ajax help


capt_nemo777
04-12-2010, 04:08 PM
i am having this error when dividing two numbers

http://i42.tinypic.com/2mc6kyf.jpg


here's my html page code


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.
w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
Practical AJAX: PHP Parameters and Error Handling
</title>
<script type="text/javascript" src="divide.js"></script>
</head>
<body>
<p>Ask server to divide
<input type="text" id="firstNumber" />
by
<input type="text" id="secondNumber" />
<input type="button" value="Send" onclick="process()" />
</p>
<div id="myDivElement" />
</body>
</html>


here's my divide.js code


var xmlhttp = createRequestObject();

function createRequestObject()
{
var xmlhttp;
try
{
xmlhttp = new XMLHttpRequest();
}
catch(e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHttp");
}
catch(e)
{}
}
if(!xmlhttp)
alert("Error in creating request object");
else
return xmlhttp;
}


function process()
{
if(xmlhttp)
{
try
{
var firstNumber = document.getElementById("firstNumber").value;
var secondNumber = document.getElementById("secondNumber").value;
var params = "firstNumber =" + firstNumber + "&secondNumber =" + secondNumber;

xmlhttp.open("GET","divide.php?" + params ,true);
xmlhttp.onreadystatechange = handleRequestStateChange;
xmlhttp.send(null);
}
catch(e)
{
alert("can't connect to server: \n" + e.toString());
}
}
}

function handleRequestStateChange()
{
if(xmlhttp.readyState == 4)
{
if(xmlhttp.status == 200)
{
try
{
handleServerResponse();
}
catch(e)
{
alert("Error in processing response: \n" + e.toString());
}
}
}
}

function handleServerResponse()
{
var xmlResponse = xmlhttp.responseXML;

if(!xmlResponse || !xmlResponse.documentElement)
throw("invalid xml structure: \n " + xmlhttp.responseText);

var rootNodeName = xmlResponse.documentElement.nodeName;
if(rootNodeName == "parsererror")
throw("invalid XML structure: \n " + xmlhttp.responseText);

xmlRoot = xmlResponse.documentElement;
if(rootNodeName != "response" || !xmlRoot.firstChild)
throw("invalid XML structure: \n " + xmlhttp.responseText);

responseText = xmlRoot.firstChild.data;
myDiv = document.getElementById('myDivElement');
myDiv.innerHTML = "Server says the answer is: " + responseText;
}


here's my divide.php code

<?php

require_once('error_handler.php');
header('Content-Type: text/xml');
$firstNumber = $_GET['firstNumber'];
$secondNumber = $_GET['secondNumber'];
$result = $firstNumber / $secondNumber;
$dom = new DOMDocument();

$response = $dom->createElement('response');
$dom->appendChild($response);
$responseText = $dom->createTextNode($result);
$response->appendChild($responseText);
$xmlString = $dom->saveXML();
echo $xmlString;

?>


and here's my error_handler.php code


<?php

set_error_handler('error_handler',E_ALL);
function error_handler($errNo, $errStr, $errFile, $errLine)
{
if(ob_get_length()) ob_clean();
header("Content-Type: text/plain");
$error_message = 'ERRNO: ' . $errNo . chr(10).
'TEXT: '. $errStr. chr(10).
'LOCATION: '. $errFile . ' , line'. $errLine;
echo $error_message;
exit;
}

?>


please tell me what's wrong

Gjslick
04-12-2010, 06:56 PM
It's because you have a space after your url parameter names in the request, causing them to come into the $_GET array as literally "firstNumber " and "secondNumber ", instead of "firstNumber" and "secondNumber".

In other words, URL parameters are formatting strings, so whitespace matters (as PHP has to parse them into variables, and can only do so using the location of the = sign). Your AJAX request URL is currently coming out like this:
divide.php?firstNumber =10&secondNumber =2

When it should be like this:
divide.php?firstNumber=10&secondNumber=2


function process()
{
if(xmlhttp)
{
try
{
var firstNumber = document.getElementById("firstNumber").value;
var secondNumber = document.getElementById("secondNumber").value;

// remove space between parameter names and = sign
var params = "firstNumber =" + firstNumber + "&secondNumber =" + secondNumber;

xmlhttp.open("GET","divide.php?" + params ,true);
xmlhttp.onreadystatechange = handleRequestStateChange;
xmlhttp.send(null);
}
catch(e)
{
alert("can't connect to server: \n" + e.toString());
}
}
}

capt_nemo777
04-12-2010, 06:59 PM
daemn..it worked,, thank you sir :)

Gjslick
04-12-2010, 07:06 PM
np dude, gl :)