Salve a tutti ho un problemino con ajax e php, l'obbiettivo del mio esercizio erea di catturare dei dati attraverso un form html e indirizzarli a uno script php attraverso javascript avanzato(ajax). Lo script php elabora i dati acquisiti, li converte in xml e inoltre gestisce gli errori vi posto qui di seguito gli script vedete un pò voi dove sbaglio xkè io nn sò + dove vedere :dipser::dipser::dipser::
1) il file html che si chiama morephp.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<title>Ajax : il passaggio di parametri e la gestione di errori</title>
<script type="text/javascript" src="morephp.js"></script>
</head>
<body>
Chiediamo al server di dividere
<input type="text" id="firstNumber" />
per
<input type="text" id="secondNumber" />
<input type="button" value="Send" onclick="process()" />
<div id="myDivElement"/>
</body>
</html>
2) il file in js morephp.js
//l'istanza XMLHttpRequest
//creo l'istanza dell'oggetto XMLHttpRequest
var xmlHttp = createXMLHttpRequestObject();
function createXMLHttpRequestObject()
{
//memorizza il riferimento dell'oggetto XMLHttpRequest
var xmlHttp;
//x tutti i browser eccetto IE6
try
{
xmlHttp = new XMLHttpRequest();
}
catch( e )
{
var xmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
"MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP","Microsoft.XMLHTTP");
//adesso provo tutti gli elementi dell'array finchè nn ne trovo quello giusto
for (var i=0; i < xmlHttpVersions.length && !xmlHttp; i ++)
{
try
{
xmlHttp = new ActiveXObject(xmlHttpVersions);
}
catch( e ) {}
}
}
if( !xmlHttp )
alert("Err!!!!! during the creation XMLHttpRequestObject");
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;
//iniziamo la richiesta http asincrona
xmlHttp.open('GET', 'morephp.php?',+ params , true );
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.send( null );
}
catch( e )
{
alert("Err!!!! collegamento al server:\n" +e.toString());
}
}
}
function handleRequestStateChange()
{
//quando readystate è in posizione 4 siamo pronti per leggere la risposta
if (xmlHttp.readyState == 4)
{
if (xmlHttp.status == 200)//TEST
{
try
{
handleServerResponse();
}
catch( e )
{
alert("errore durante la lettura della risposta:"+ e.toString());
}
}
else
{
alert('Si sta verificando un errore sul server nella ricezione dei dati:\n'+ xmlHttp.StatusText );
}
}
}
//gestione risposta ricevuta dal server
function handleServerResponse()
{
//recupera la risposta del server sotto forma di oggetto XML DOM
var xmlResponse = xmlHttp.responseXML;
// catturiamo eventuali errori con IE e Opera
if (!xmlResponse || !xmlResponse.documentElement )
throw("Struttura xml non valida:\n" + xmlHttp.responseText );
//catturiamo eventuali errori con ff
var rootNodeName = xmlResponse.documentElement.nodeName;
if (rootNodeName == "parsererror")
throw("Struttura xml non valida:\n" + xmlHttp.responseText );
xmlRoot = xmlResponse.documentElement;
if (rootNodeName != "response"|| !xmlRoot.firstChild )
throw("Struttura xml non valida:\n" + xmlHttp.responseText );
//IL VALORE CHE DOBBIAMO MOSTRARE È IL FIGLIO DELL'ELEMENTO ROOT DI RESPONSR
responseText = xmlRoot.firstChild.data;
//mostriamo il messaggio all'utente
myDiv = document.getElementById("myDivElement");
myDiv.innetHTML = "il server dice che la risposta è:" + reponseText;
}
3) il file in php morephp.php
<?php
//carichiamo il modulo per la gestione degli errori
require_once('error_handler.php');
//inviamo l'output come xml
header ('Content-Type: text/xml');
//calcoliamo il risultato
$firstNumber = $_GET['firstNumber'];
$secondNumber = $_GET['secondNumber'];
$result = $firstNumber / $secondNumber;
//creiamo il nuovo documento XML
$dom = new DOMDocument();
//creiamo l'elemento radice response
$response = $dom -> createElement('response');
$dom -> appendChild($response);
// aggiungiamo l'elemento calcolato al response
$responseText = $dom ->createTextNode($result);
$response -> appendChild($responseText);
//costruiamo la struttura XML in una variabile stringa
$xmlString = $dom -> saveXML(); //N.B.
//restituiamo la variabile stringa
echo $xmlString;
?>
4) il file di gestione errori in php error_handler.php
<?php
//impostiamo error_handler come metodo per la gestione degli errori
set_error_handler('error_handler', E_ALL);
//funzione per la gestione degli errori
function error_handler($errNo, $errStr, $errFile, $errLine)
{
//cancelliamo qualunque output che è stato generato
if(ob_get_length()) od_clean();
//restituiamo il messaggio di errore
$error_message = 'ERRNO:' . $errNo.chr(10). 'TEXT:'. $errStr.chr(10). 'LOCATION:' . $errFile . ', line' . $errLine;
echo $error_message;
//evitiamo che venga processato il resto dello script PHP
exit;
}
?>
Vi chiedo cortesemente di aiutarmi io nn so + ke fare!!!!!! Grazie
1) il file html che si chiama morephp.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<title>Ajax : il passaggio di parametri e la gestione di errori</title>
<script type="text/javascript" src="morephp.js"></script>
</head>
<body>
Chiediamo al server di dividere
<input type="text" id="firstNumber" />
per
<input type="text" id="secondNumber" />
<input type="button" value="Send" onclick="process()" />
<div id="myDivElement"/>
</body>
</html>
2) il file in js morephp.js
//l'istanza XMLHttpRequest
//creo l'istanza dell'oggetto XMLHttpRequest
var xmlHttp = createXMLHttpRequestObject();
function createXMLHttpRequestObject()
{
//memorizza il riferimento dell'oggetto XMLHttpRequest
var xmlHttp;
//x tutti i browser eccetto IE6
try
{
xmlHttp = new XMLHttpRequest();
}
catch( e )
{
var xmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
"MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP","Microsoft.XMLHTTP");
//adesso provo tutti gli elementi dell'array finchè nn ne trovo quello giusto
for (var i=0; i < xmlHttpVersions.length && !xmlHttp; i ++)
{
try
{
xmlHttp = new ActiveXObject(xmlHttpVersions);
}
catch( e ) {}
}
}
if( !xmlHttp )
alert("Err!!!!! during the creation XMLHttpRequestObject");
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;
//iniziamo la richiesta http asincrona
xmlHttp.open('GET', 'morephp.php?',+ params , true );
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.send( null );
}
catch( e )
{
alert("Err!!!! collegamento al server:\n" +e.toString());
}
}
}
function handleRequestStateChange()
{
//quando readystate è in posizione 4 siamo pronti per leggere la risposta
if (xmlHttp.readyState == 4)
{
if (xmlHttp.status == 200)//TEST
{
try
{
handleServerResponse();
}
catch( e )
{
alert("errore durante la lettura della risposta:"+ e.toString());
}
}
else
{
alert('Si sta verificando un errore sul server nella ricezione dei dati:\n'+ xmlHttp.StatusText );
}
}
}
//gestione risposta ricevuta dal server
function handleServerResponse()
{
//recupera la risposta del server sotto forma di oggetto XML DOM
var xmlResponse = xmlHttp.responseXML;
// catturiamo eventuali errori con IE e Opera
if (!xmlResponse || !xmlResponse.documentElement )
throw("Struttura xml non valida:\n" + xmlHttp.responseText );
//catturiamo eventuali errori con ff
var rootNodeName = xmlResponse.documentElement.nodeName;
if (rootNodeName == "parsererror")
throw("Struttura xml non valida:\n" + xmlHttp.responseText );
xmlRoot = xmlResponse.documentElement;
if (rootNodeName != "response"|| !xmlRoot.firstChild )
throw("Struttura xml non valida:\n" + xmlHttp.responseText );
//IL VALORE CHE DOBBIAMO MOSTRARE È IL FIGLIO DELL'ELEMENTO ROOT DI RESPONSR
responseText = xmlRoot.firstChild.data;
//mostriamo il messaggio all'utente
myDiv = document.getElementById("myDivElement");
myDiv.innetHTML = "il server dice che la risposta è:" + reponseText;
}
3) il file in php morephp.php
<?php
//carichiamo il modulo per la gestione degli errori
require_once('error_handler.php');
//inviamo l'output come xml
header ('Content-Type: text/xml');
//calcoliamo il risultato
$firstNumber = $_GET['firstNumber'];
$secondNumber = $_GET['secondNumber'];
$result = $firstNumber / $secondNumber;
//creiamo il nuovo documento XML
$dom = new DOMDocument();
//creiamo l'elemento radice response
$response = $dom -> createElement('response');
$dom -> appendChild($response);
// aggiungiamo l'elemento calcolato al response
$responseText = $dom ->createTextNode($result);
$response -> appendChild($responseText);
//costruiamo la struttura XML in una variabile stringa
$xmlString = $dom -> saveXML(); //N.B.
//restituiamo la variabile stringa
echo $xmlString;
?>
4) il file di gestione errori in php error_handler.php
<?php
//impostiamo error_handler come metodo per la gestione degli errori
set_error_handler('error_handler', E_ALL);
//funzione per la gestione degli errori
function error_handler($errNo, $errStr, $errFile, $errLine)
{
//cancelliamo qualunque output che è stato generato
if(ob_get_length()) od_clean();
//restituiamo il messaggio di errore
$error_message = 'ERRNO:' . $errNo.chr(10). 'TEXT:'. $errStr.chr(10). 'LOCATION:' . $errFile . ', line' . $errLine;
echo $error_message;
//evitiamo che venga processato il resto dello script PHP
exit;
}
?>
Vi chiedo cortesemente di aiutarmi io nn so + ke fare!!!!!! Grazie