Fatto ulteriori prove con XMLHTTP usando la serializzazione PHP al posto di XML per la trasmissione dei dati e funziona perfettamente.

Ecco un esempio

#FILE phpData.php (riceve la request e restituisce i dati)

<?php


//fingiamo che $x sia l'array risultante da una query al db

$x = array() ;

$x[0] = array(

'nome' => 'Mario',
'cognome' => 'Rossi',
'indirizzo' => 'Via delle Grazie 10',
'citta' => 'Treviso',
'telefono' => '3337169310'
) ;
$x[1] = array(

'nome' => 'Ugo',
'cognome' => 'Bretella',
'indirizzo' => 'Via dell\'industria 10',
'citta' => 'Padova',
'telefono' => '3334427567'
) ;

//quale record voglio prelevare?

//un po' di validazione dell'input
if(isset($_REQUEST['record']) && trim($_REQUEST['record'])!='' && isset($x[$_REQUEST['record']]))
{
$record = $x[$_REQUEST['record']] ;
}
else
{
//se il record richiesto non esiste restituisco il primo
$record = 0 ;
}

//serializzo e invio all'output con echo
echo(serialize($record)) ;
?>

#FILE jsReader (effettua la request e riceve i dati)

<html>
<head>
<script language="JavaScript" type="text/javascript" src="./js2php/PHPunserializer.js"></script>
<script language="JavaScript" type="text/javascript" src="./js2php/PHPserializer.js"></script>
<script>
/*
Funzione crossbrowser per l'oggetto XMLHTTP
*/
//explorer
function getXMLHttp(){
var xmlhttp = null;
if (window.ActiveXObject) {
if (navigator.userAgent.toLowerCase().indexOf("msie 5") != -1) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} else {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
}
//Mozilla
else if (!xmlhttp && typeof(XMLHttpRequest) != 'undefined') {
xmlhttp = new XMLHttpRequest()
}
return xmlhttp
}

function elaboraRisposta()
{
if (objHTTP.readyState == 4) {

/******
elaborazione : da array associativo PHP ad oggetto Javascript
******/
var unserializer = new PHPunserializer() ;
var php2js = unserializer.parse(objHTTP.responseText) ;

alert(php2js['indirizzo']) ;
}

}

function getData(recordNum)
{
objHTTP = getXMLHttp();

objHTTP.open("GET", "phpData.php?record="+recordNum, true);

objHTTP.onreadystatechange = elaboraRisposta ;

objHTTP.send(null)
}
</script>
</head>


<body>
Vedi record 1

vedi record 2

</body>

<html>