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); } } }

Rispondi quotando