Salve ragazzi! Ho un problema con una pagina in cui uso AJAX.
Nella mia pagina ho due tabelle, grid1 e grid2.
La grid1 la costruisco in PHP al caricamento della pagina (prendendo i dati da una tabella di un database MySQL online).
La grid2 inizio a costruirla sull'evento onload del body (quindi, dopo grid1 ed usando la stessa tabella del database).
Mentre si costruisce la grid2 (in circa 10 secondi), posso interagire con la grid1 e, in particolare, posso cliccarci su per inserire dati e farli arrivare nel database con AJAX.
Qui nasce il problema: se, mentre si carica grid2, provo ad inviare dati al database, grid2 non si carica più!
Inizialmente pensavo fosse un problema di permessi sulla tabella, ovvero credevo non fosse possibile leggere e scrivere contemporaneamente sulla stessa tabella, ma anche usando due tabelle diverse mi da lo stesso inconveniente.
Allora ho spostato l'attenzione sulla richiesta XMLHttpRequest in Javascript. Nel Javascript mi sono scritto alcune funzioni per creare istanze dell'oggetto XMLHttpRequest e gestirle:
codice:
//** Inizio funzioni per l'oggetto XMLHttpRequest **//
var xmlHttp; var hSC; var eleID;
// Crea una istanza di XMLHttpRequest
function createXMLHttpRequest() { if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } }
// Avvia la query sul database
function startRequest(myreq, mymod, mypar) { createXMLHttpRequest(); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open(mymod, myreq, true); if (mymod == 'POST') { xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=ISO-8859-1"); } xmlHttp.send(mypar); }
// Ritorna il risultato della query
function handleStateChange() { if (hSC == 1) { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { document.getElementById(eleID).innerHTML = xmlHttp.responseText; } } } }
//** Fine funzioni per l'oggetto XMLHttpRequest **//
Per inviare una richiesta, uso questo codice:
codice:
hSC = 1; eleID = 'grid2'; startRequest("getgrid.php", "POST", 'param1=1¶m2=0');
dove hSC mi permette di dire alla richiesta se voglio gestire una risposta ed eleID è l'elemento in cui voglio visualizzare la risposta. getgrid.php è il file che mi costruisce la griglia con tutti i dati richiesti. Secondo me, quando parte la richiesta di scrittura nel database mentre e' in corso quella di lettura, la seconda (scrittura) blocca la prima (lettura). Infatti, nel database i dati mi vengono scritti correttamente! Credo che non venga creata la seconda istanza di XMLHttpRequest, ma viene distrutta la prima istanza e reinizializzata: ho pensato bene? E quale potrebbe essere la soluzione? Grazie!