Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di Anxx
    Registrato dal
    Jul 2009
    Messaggi
    12

    Visibilità funzioni javascript da pagine php con AJAX

    Buongiorno a tutti,
    ho un problema che mi affligge... sto realizzando un sito per effettuare delle prenotazioni con php + ajax.
    La pagina principale contiene 3 div, il primo contiene il form con i dati da inserire, il secondo serve a contenere un messaggio del tipo "Prenotazione effettuata/fallita", il terzo visualizza gli utenti prenotati.
    Cliccando sul bottone prenota del primo DIV eseguo la prenotazione e visualizzo il testo restituito da una pagina php chiamata con ajax.
    Ora arriva il problema: vorrei scrivere sul secondo DIV "Prenotazione effettuata" se tutto è andato ok, vorrei farlo tramite una funzione javascript che ho nell'HEAD della pagina principale (mi serve per farla sparire con dissolvenza dopo pochi secondi) ma dato che non posso associarla ad un evento, l'ho inserita nel testo nel seguente modo
    echo "<script>scriviDIV2();</script>";
    ma la funzione non viene eseguita... se tale riga la inserisco nella pagina php principale viene eseguita correttamente, allo stesso modo viene eseguita nella pagina secondaria se associata alla pressione di un bottone, ma a me serve eseguirla a seguito di una condizione determinata da codice php... come posso fare?
    E perché non funziona così??
    Grazie!
    -----

    Al mondo ci sono solo 10 tipi di persone: chi comprende il sistema binario e chi no...

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,654
    Se non ho capito male echo "<script>scriviDIV2();</script>"; viene generato con ajax da php?

    Se si probabilmente non fa nulla perche' all'inizio quando carichi la pagina quel div non esiete e quindi anche se lo scrivi con ajax nel codice non viene riconosciuto.

    Dal metodo che chiama ajax e mostra l'esito non puoi gestire la visualizzazione del div che deve sparire a seconda dell esito?

  3. #3
    Utente di HTML.it L'avatar di Anxx
    Registrato dal
    Jul 2009
    Messaggi
    12
    Si posso farlo, il fatto è che in seguito alla buona riuscita dell'insert su db, fatta dalla pagina php secondaria, devo visualizzare "Prenotazione effettuata" oppure "Errore durante la prenotazione".
    I 3 div cmq esistono già dal primo caricamento della pagina, e infatti il php riesce a scriverci correttamente dentro, il problema è che non riesco a far eseguire il codice javascript senza legarlo ad un evento.
    -----

    Al mondo ci sono solo 10 tipi di persone: chi comprende il sistema binario e chi no...

  4. #4
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,654
    Ma gli eventi sarebbero "Prenotazione effettuata" oppure "Errore durante la prenotazione" no?

    Alla fine quando viene generata una di queste non puoi fare qualcosa con javascript a seconda di cos'e' uscito?

  5. #5
    Utente di HTML.it L'avatar di Anxx
    Registrato dal
    Jul 2009
    Messaggi
    12
    Cerco di essere più chiaro...

    nella pagina principale ho definito questa funzione javascript


    function prenota(data) {
    params = "orderdate="+data;
    params += "&insertYN=Y";
    params += "&ora="+(document.getElementById("ora").value) ;
    params += "&minuto="+document.getElementById('minuto').value ;
    params += "&nome="+document.getElementById('nome').value ;
    params += "&cognome="+document.getElementById('cognome').val ue;
    params += "&type="+document.getElementById('type').value ;
    params += "&istruttore="+document.getElementById('istruttore ').value;
    sendRequest('POST', 'vediPrenotati.php', params, 'visualizza');

    }

    che chiama la sendRequest() che è la mia ajax.
    La pagina vediPrenotati.php non fa altro che effettuare la prenotazione e visualizzare tutti i prenotati di quel giorno, ti riporto sotto le linee indispensabili

    ...
    $query = "insert into....";
    $res = mysql_query($query, $db);
    mysql_close($db);

    if ($res) {
    echo "<script>scriviDIV2('Prenotazione Effettuata');</script>";
    } else {
    echo "<script>scriviDIV2('Errore durante la prenotazione ');</script>";
    }
    }

    Questo codice php viene eseguito correttamente, ma non viene lanciato scriviDIV2() e non so xché...
    Se tra i tag <script> ci metto un semplice alert, non funziona nemmeno quello... credo sia un problema di logica di javascript....
    -----

    Al mondo ci sono solo 10 tipi di persone: chi comprende il sistema binario e chi no...

  6. #6
    Leggi Questo

    In pratica si tratta di chiamare una funzione Javascript quando hai ricevuto la risposta dal server.

    Puoi quindi inserire nella risposta del codice PHP un flag che ti indichi se l'operazione ha avuto successo o meno.

    Javascript interpreta il risultato e a seconda aggiorna contestualmente il DIV che ti interessa..

    Spero di esserti stato d'aiuto.

    CIao

  7. #7
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,654
    visualizza e' l id dell elemento che contiene l'esito no? ossia il tuo echo(che nn viene eseguito come dicevo all inizio perche creato dopo nella pagina come elemento).

    Con ajax hai cmq le varie fasi da verificare(caricamento, esecuzione) e con quelle gestisci cosa fare nel mentre o alla fine.

    Io per comodita uso ajax con jquery http://docs.jquery.com/Ajax/jQuery.ajax#options dato che gestice di suo le varie fasi.

    Come da esempio "succes:" e' l'esito generato da php e ritornato nel js, li dentro puoi fare poi quello che ti serve.

  8. #8
    Utente di HTML.it L'avatar di Anxx
    Registrato dal
    Jul 2009
    Messaggi
    12
    Per UnderMaken:
    Non ho ben capito a cosa serva questa funzione, ma cmq non mi pare che riesca a risolvere i miei problemi.
    Ho provato ad aggiungere un campo input hidden di cui cambio il value in base all'esito dellq query sql con php.

    $res = mysql_query($query, $db);
    mysql_close($db);

    if ($res) {
    echo "<input id=\"prenOK\" name=\"prenOK\" type=\"hidden\" value=\"OK\">";
    } else {
    echo "<input id=\"prenOK\" name=\"prenOK\" type=\"hidden\" value=\"NOK\">";
    }

    Poi ho aggiungo nel javascript un'ulteriore istruzione

    function prenota(data) {
    params = "orderdate="+data;
    params += "&insertYN=Y";
    params += "&ora="+(document.getElementById("ora").value) ;
    params += "&minuto="+document.getElementById('minuto').value ;
    params += "&nome="+document.getElementById('nome').value ;
    params += "&cognome="+document.getElementById('cognome').val ue;
    params += "&type="+document.getElementById('type').value ;
    params += "&istruttore="+document.getElementById('istruttore ').value;
    //alert(params);
    sendRequest('POST', 'vediPrenotati.php', params, 'visualizza');
    ok=document.getElementById('prenOK').value;
    alert(ok);

    }

    Ma guarda un po'... l'alert non appare!!
    Nn so + che pensare? Vorrei capire cosa sbaglio, la teoria, almeno capisco come risolvere.... l'errore deve essere concettuale!

    X m4rko80:
    Le fasi io le gestisco col mio script che mi vede gli stati (0-4) e che non ho riportato qui, ma li gestisco.
    Il mio problema è lanciare lo script js dalla pagina php che ho chiamato con ajax, non gestire lo stato della chiamata...

    Mi sa che se contiua così abbandono questa struttura basata su ajax!!
    -----

    Al mondo ci sono solo 10 tipi di persone: chi comprende il sistema binario e chi no...

  9. #9
    Utente di HTML.it L'avatar di Anxx
    Registrato dal
    Jul 2009
    Messaggi
    12
    Con l'ultimo metodo che vi ho scritto adesso mi funziona, ma solo alla seconda pressione del button enemmeno tutte le volte... qualcosa mi sfugge, sempre di +....
    Cmq resta il fatto che non ho capito il motivo x cui la prima soluzione adottata non funzionava... forse xché il javascript non viene caricato in quel modo quando si aggiorna una pagina con ajax.. ma non l'ho trovato scitto da nessuna parte!
    Grazie cmq a entrambi!!!
    -----

    Al mondo ci sono solo 10 tipi di persone: chi comprende il sistema binario e chi no...

  10. #10
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,654
    Ma e' proprio qua il problema secondome.... non gestisci bene gli stati (0-4)..

    ....params += "&istruttore="+document.getElementById('istruttore ').value;
    //alert(params);
    sendRequest('POST', 'vediPrenotati.php', params, 'visualizza');
    ok=document.getElementById('prenOK').value;
    alert(ok);
    }....

    questa riga ok=document.getElementById('prenOK').value; viene eseguita sicuramente prima che sendRequest('POST', 'vediPrenotati.php', params, 'visualizza'); eiste e quindi non trova nulla.
    La devi eseguire quando lo stato e' 4(se nn sbaglio 4 e' richiesta completata) altrimenti nn andra' mai.

    PS la chiamata ajax e' asincrona e quindi la sequenza di esecuzione e' a parte rispetto l'altra parte del codice e quindi puo' essere piu' lenta o piu' veloce mentre tutto il resto viene cmq eseguito.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.