Ciao a tutti,
ho un problema con un mio script Ajax, che interroga il db delle spedizioni FeDEx, tramite le loro API, riceve un file XML, verifica se il pacco e' stato consegnato e lo scrive dentro ad un <div>. Ora, il tutto funziona tranquillamente se lancio la funzione una volta e, prima di lanciarla di nuovo aspetto che la prima abbia finito. Se invece provo a verificare lo stato di due pacchi uno dopo l'altro, mi riceve i risultati solo dell'ultimo...
Il mio scopo era quello di creare una pagina con un elenco di una trentina di pacchi, la pagina si carica, e nel mentre lancio una chiamata per ogni spedizione e un po' alla volta mi si popola dei risultati sullo stato della spedizione.
Ho provato a fare una funzione sincrona, funziona, ma il caricamento si blocca ad ogni chiamate di Ajax, e si perde il vantaggio del caricamento parziale.
In sostanza, c'e' un modo per eseguire una chiamata asincrona ad una stessa funzione piu' volte, senza aspettare che sia finita (visto che i tempi di risposta del server sono di qualche secondo)?
Posto il codice per chiarezza:
codice:
function DeliveredXml(awb) {
XmlHttp = XmlHttpCreate();
if (awb!=''){
file='DeliveredXml';
url='DeliveredXml.php?awb='+awb;
document.getElementById('delivered'+awb).innerHTML='';
att_img=document.createElement('IMG');
att_img.setAttribute('src','searching.gif');
att_img.setAttribute('align','absbottom');
document.getElementById('delivered'+awb).appendChild(att_img);
XmlHttp.open('get', url, true);
XmlHttp.onreadystatechange = eval('response'+String(file));
XmlHttp.send(null);
}else{
alert('Devi inserire un valore');
}
}
function responseDeliveredXml() {
if(XmlHttp.readyState == 4){
if (XmlHttp.status == 200) {
// alert(respText = XmlHttp.responseText);
var respXML = XmlHttp.responseXML;
IDcella='delivered'+respXML.getElementsByTagName('TrackingNumber')[0].firstChild.nodeValue;
svuotaEl(IDcella);
if(respXML.documentElement.nodeName=='FDXTrackReply'){
// alert(respXML.getElementsByTagName('ScanDescription')[0].firstChild.nodeValue);
document.getElementById(IDcella).innerHTML=respXML.getElementsByTagName('ScanDescription')[0].firstChild.nodeValue;
}else if(respXML.documentElement.nodeName=='TrackResponse'){
Activity=respXML.getElementsByTagName('Activity')[0];
// alert(Activity.getElementsByTagName('Description')[0].firstChild.nodeValue);
document.getElementById(IDcella).innerHTML=Activity.getElementsByTagName('Description')[0].firstChild.nodeValue;
}
}else{
alert("There was a problem retrieving the XML data:\n" + XmlHttp.statusText);
}
}
}