Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [AJAX] [RISOLTO] Query AJAX contemporanee.

    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&param2=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!

  2. #2
    Mi rispondo da solo
    Il problema era proprio dove pensavo! Cambiando la variabile dell'istanza (xmlHttp) tutto funziona come dovrebbe. Evidentemente, anche creando una istanza diversa di xmlHttp, si conserva lo stesso nome e la nuova richiesta annulla la prima. Nei linguaggi per applicazioni desktop, però, non funziona così!!!
    Chi mi sa illuminare su questo comportamento, avrà la mia eterna gratitudine!!!
    Ciao

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ma non ti conviene usare jQuery per fare le richieste AJAX?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    E' vero, sarebbe più comodo, ma al momento mi va bene così! Grazie.
    Modifico la mia richiesta: come si possono istanziare più oggetti XMLHttpRequest nello stesso tempo variando di volta in volta il nome? Usando un array?

    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.