1) idem se le chiamate sono sincrone o meno...
2) uso get
3) Firefox ma instanzio l'oggetto xmlHttpRequest a seconda del browser

Eccoti parte del codice (il "core"):

...premessa: par è un oggetto che ho creato io: contiene un array associativo con i parametri che mi servono, e il metodo encodeParams() mi trasforma l'array in un'unica stringa formattata per essere mandata in get (tutto provato e funzionante),in base ad altri parametri invio un certo numero di richieste, quindi :
...
for (var j=10; j<=i; j+=10){
par.changeParam("numResult",j);
par.changeParam("idReq",(j/10));
r = par.encodeParams();
sendReq('doGoogleSearch',r,j);
}
...

----> XMLHttpRequest, creazione ed invio richiesta <----

function createRequestObject() {
var ro;
var browser = navigator.appName;
if(browser == "Microsoft Internet Explorer"){
ro = new ActiveXObject("Microsoft.XMLHTTP");
}else{
ro = new XMLHttpRequest();
}
return ro;
}

var http = createRequestObject();

function sendReq(action,param,i) {

alert("sending request "+(i/10));

http.open('get','rpc.php?action='+action+param,tru e);
http.onreadystatechange = handleResponse;
http.send(null);
}

function handleResponse() {

alert("http.readyState: "+http.readyState);

if(http.readyState == 4){
var response = http.responseText;
document.getElementById("content").innerHTML += response;
}
}


----> rpc.php <----

<?php
include("search.util.php");

if ($_REQUEST['action']=='doGoogleSearch'){

$end = '@end@'.$_REQUEST['idReq'].'@end@';

settype($_REQUEST['startFrom'],"integer");
settype($_REQUEST['numResult'],"integer");
settype($_REQUEST['filter'],"boolean");
settype($_REQUEST['adultContent'],"boolean");
$res = "";

$params = array(
'Googlekey' => 'DeQ3bddQFHIULlX6C7BBVBwtQ/yFUOVq', // Google license
'queryStr' => $_REQUEST['queryStr'], // termine di ricerca digitato
'startFrom' => $_REQUEST['numResult']-10, // indice di inizio risultati
'maxResults' => 10, // 10 = numero massimo consentito
'filter' => $_REQUEST['filter'], // rimuove risultati simili
'restrict' => '', // restrict by topic
'adultContent' => $_REQUEST['adultContent'], // filtro adult content
'language' => $_REQUEST['language'], // restrict by language
'iencoding' => 'utf8', // input encoding
'oencoding' => 'utf8' ); // output encoding

$MyResult = doSearch($params);
$res = showSearchResult($MyResult);
echo $end.$res;
}
----> search.util.php <----

<?php

include ("nusoap.php");


function doSearch($params)
{
$soapclient = new soapclient("http://api.google.com/search/beta2");
$Result = $soapclient->call("doGoogleSearch", $params, "urn:GoogleSearch", "urn:GoogleSearch");
return $Result;
}

function showSearchResult($Result)
{
....istruzioni per la stampa dei risultati...
(ometto il codice perchè è solo una serie di echo, che è poco interessante, ma funziona...)
}

?>