Quando si tratta di usare ajax per caricare dati esterni in xml e json, si tende a use sempre la modalità asincrona per non bloccare temporaneamente il funzionamento del browser.
Vediamo un esempio classico fatto con jquery:
fnCallBack=function(xml) {
console.log(xml);
}
$.ajax({type: “GET”,
url: “data.xml”,
dataType: “xml”,
success: fnCallBack
});
In questo caso usiamo una funzione di callback per leggere i dati quando i dati sono stati caricati.
Ma che fare quando dobbiamo aspettare che vengano caricati 5 file xml o json per poi eseguire una certa operazione?
Con la modalità asincrona e l’uso di callback diventerebbe una cosa ingestibilie sia da scrivere che da mantenere.
La soluzione è utilizzare delle chiamate sincrone in un processo asincrono! ![]()
Complicato! No semplicissimo…. vediamo il codice:
dataLoading=function() {
$.ajax({type: “GET”,
url: “data1.xml”,
dataType: “xml”,
async:false,
success: function(xml) {
xmlDoc1=xml
}});
$.ajax({type: “GET”,
url: “data2.xml”,
dataType: “xml”,
async:false,
success: function(xml) {
xmlDoc2=xml
}});
$.ajax({type: “GET”,
url: “data3.xml”,
dataType: “xml”,
async:false,
success: function(xml) {
xmlDoc3=xml
}});
}
setTimeout(dataLoading,100);
Basta richiamare una funzione che carica dei dati in modalità sincrona dentro un altro processo utilizzando la funzione setTimeout di javascript!
Semplice ed efficace!