• User Attivo

    Valori di un form senza conoscerne i campi

    Ciao a tutti, premettendo che non sono esperto di ajax, mi sono scontrato con un problema del quale non riesco proprio a venirne a capo.

    Obiettivo: Avere un form, inviarlo e riscrivere un div nella medesima pagina che ne contenga l'output.

    E che ci vuole?!

    Ebbene, il punto è che vorrei la mia funzione ajax GENERICA, non posso impostare i nomi dei campi che verranno passati fal form, altrimenti dovrei crearmi una funzione per ogni form presente nel pannello di controllo.

    Di seguito il mio codice:

    [php]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
    <script language="Javascript">
    //Funzione per la gestione asincrona AJAX
    function xmlhttpPost(strURL,form,div) {
    //Inizializzo l'oggetto xmlHttpReq
    var xmlHttpReq = false;
    var self = this;
    // la tipologia di browser utilizzato per selezionare la tipologia di oggetto da creare.
    // Se sono in un browser Mozilla/Safari, utilizzo l'oggetto XMLHttpRequest per lo scambio di dati tra browser e server.
    if (window.XMLHttpRequest) {
    self.xmlHttpReq = new XMLHttpRequest();
    }
    // Se sono in un Browser di Microsoft (IE), utilizzo Microsoft.XMLHTTP
    //che rappresenta la classe di riferimento per questo browser
    else if (window.ActiveXObject) {
    self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    //Apro il canale di connessione per regolare il tipo di richiesta.
    //Passo come parametri il tipo di richiesta, url e se è o meno un operazione asincrona (isAsync)
    self.xmlHttpReq.open('POST', strURL, true);

    //setto l'header dell'oggetto
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

    /* Passo alla richiesta i valori del form in modo da generare l'output desiderato*/
    self.xmlHttpReq.send(recuperaValore(form));

    /* Valuto lo stato della richiesta */
    self.xmlHttpReq.onreadystatechange = function() {

    //Se lo stato è completo
    if (self.xmlHttpReq.readyState == 4) {
    /* Aggiorno la pagina con la risposta ritornata dalla precendete richiesta dal web server.Quando la richiesta è terminata il responso della richiesta è disponibie come responseText.*/
    aggiornaPagina(self.xmlHttpReq.responseText,div);
    }
    }

    }
    /Questa funzione recupera i dati dal form./
    function recuperaValore(form) {
    var form = document.forms[form];
    var nome = form.nome.value;
    valore = 'nome=' + escape(nome);
    return valore;
    }
    /Aggiornamento asincrono dell'elemento risultato/
    function aggiornaPagina(stringa,div){
    document.getElementById(div).innerHTML = stringa;
    }
    </script>
    </head>

    <body>
    <!-- Questo è il form, ad ogni submit del forum viene richiamata la funzione xmlhttpPost che ha come argomento il file esempio_ajax -->
    <form name="form" onSubmit="javascript:xmlhttpPost('esempio_ajax.php','form','risultato'); return false;">
    <p>Input :
    <input name="nome" type="text">
    <input value="Invia" type="submit">
    </p>
    <div id="risultato"></div>
    </form>
    </body>
    </html>
    [/php]Per creare la mia funzione generica, io passo alla funzione* xmlhttpPost *il nome del form, la pagina da richiamare e il nome del div dove mostrare il risultato. Fin qui nessun problema.
    Il punto è che nella funzione * recuperaValore *sono stato costretto ad impostare i nomi dei campi del form. Io vorrei che la funzione se li prenda tutti e li invi direttamente senza doverli impostare singolarmente, in modo da utilizzare la funzione anche per altri form.

    E' due giorni che ci sbatto la testa...
    Come posso fare?

    Grazie mille in anticipo per eventuali risposte.


  • User Attivo

    Sembra farlo apposta, dopo 2 giorni che cercavo, poco dopo aver pubblicato questo post , ho trovato questa libreria:
    http: //free-script.it/post/Script_ajax_Form_method_post_e_chiamata_asincrona_con_ahah-88.htm

    In pratica basta chiamare questa funzione:
    completeAHAH.likeSubmit('ricevo.php', 'POST', 'formName', 'result');

    indicandone appunto la pagina di destinazione, il nome del form, i campi da passare e l'id di dove deve essere mostrato il risultato. Perfettamente quello che mi serviva.
    Se comunque qualcuno volesse darmi ulteriori dritte, ne sarei solamente felice.
    Un saluto


    EDIT: Retifico tutto.... non trovo la libreria da nessuna parte... tutti i link in rete (compresi sul sito ufficial) non funzionano e la documentazione risale tutta a più di 2 anni fa. Se riuscisse a darmi una mano per fare quella funzione, gliene sarei molto grato.