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

    [AJAX] Form con POST. Su IE perfetto, su FF si blocca

    Salve. Questo è il codice javascript delle funzioni di appoggio che uso per far funzionare AJAX. Da notare che questa funzione si adatta sia per il GET sia per il POST.
    La funzione ajax che richiamo è ajaxthis(elementz,nomeFile,tipoconn) . dove elementz è l'ID dell'elemento dove verrà eseguito l'innerHTML. nomeFile è il nome del file da richiamare con ajax e tipoconn è GET o POST.
    Il problema è il seguente: su IE va tutto perfetto. La form funziona e restituisce correttamente il risultato. Su FF invece ciò non succede. Clicco su Invio e non succede nulla. Dopo numerosi test ho raggiunto la conclusione che su Firefox non vengano trasmesse le variabili del FORM. Non so perchè. Per questo chiedo il vostro aiuto! Grazie fin da ora! Saluti


    // funzione per assegnare l'oggetto XMLHttpRequest
    // compatibile con i browsers più recenti e diffusi
    function assegnaXMLHttpRequest() {

    // lista delle variabili locali
    var
    // variabile di ritorno, nulla di default
    XHR = null,

    // informazioni sul nome del browser
    browserUtente = navigator.userAgent.toUpperCase();


    // browser standard con supporto nativo
    // non importa il tipo di browser
    if(typeof(XMLHttpRequest) == "function" || typeof(XMLHttpRequest) == "object")
    { XHR = new XMLHttpRequest(); }

    // browser Internet Explorer
    // è necessario filtrare la versione 4
    else if(
    window.ActiveXObject &&
    browserUtente.indexOf("MSIE 4") < 0
    ) {

    // la versione 6 di IE ha un nome differente
    // per il tipo di oggetto ActiveX
    if(browserUtente.indexOf("MSIE 5") < 0)
    XHR = new ActiveXObject("Msxml2.XMLHTTP");

    // le versioni 5 e 5.5 invece sfruttano lo stesso nome
    else
    XHR = new ActiveXObject("Microsoft.XMLHTTP");
    }

    return XHR;
    }



    // funzione di caricamento testo,
    // accetta una stringa contenente
    // il nome di un file da leggere
    function ajaxthis(elementz,nomeFile,tipoconn) {

    // assegnazione oggetto XMLHttpRequest
    ajax = assegnaXMLHttpRequest();

    // assegnazione elemento del documento
    elemento = document.getElementById(elementz);


    if (document.forms[0] > "") {

    stringa = PreparaDati();
    }
    else
    { stringa = ""; }


    ajax.open(tipoconn, nomeFile, true);
    ajax.onreadystatechange = function() {

    // verifica dello stato
    if(ajax.readyState == 4) {
    // verifica della risposta da parte del server
    if(ajax.status == 200)
    // operazione avvenuta con successo
    elemento.innerHTML = ajax.responseText;
    else {
    // errore di caricamento
    elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.
    ";
    elemento.innerHTML += "Errore riscontrato: " + statusText[ajax.status];
    }
    }
    }

    // impostazione richiesta asincrona in GET o POST
    // del file specificato

    if (tipoconn == "get") {
    ajax.setRequestHeader("Connection", "close");
    }
    else {
    ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
    ajax.setRequestHeader("Content-length", stringa.length);
    ajax.setRequestHeader("Connection", "close");
    }

    if (tipoconn == "get") {
    ajax.send(null);
    }
    else {
    ajax.send(stringa);
    }


    }

    function PreparaDati(){
    stringa = "";
    var form = document.forms[0];
    var numeroElementi = form.elements.length;

    for(var i = 0; i < numeroElementi; i++){
    if(i < numeroElementi-1){
    stringa += form.elements[i].name+"="+escape(encodeURIComponent(form.elements[i].value))+"&";
    }else{
    stringa += form.elements[i].name+"="+escape(encodeURIComponent(form.elements[i].value));
    }
    }
    return stringa;
    }



    Questo è invece il form:

    <form name='iscrizione' method='post' action='trucchi_ajax_ricerca.php' onsubmit="ajaxthis('ricerca','trucchi_ajax_ricerca .php','post'); return false;" style='padding: 0px; border: 0px; margin: 0px;'>

    <table width='100%' style='border-left: 1px solid black; border-top: 1px solid black;'>
    <tr>
    <td class='trucchi_charts forum_cells_impl' width='100'> Nome del Gioco </td>
    <td class='trucchi_charts forum_cells'>
    <input type='text' name='nome' class='form_cp' style='margin: 0px; width: 400px; height: 20px; font-size: 18px;' onkeyup="Verifica();" />


    </td>
    </tr>
    <tr>
    <td class='trucchi_charts forum_cells_impl' width='100'> Invia </td>
    <td class='trucchi_charts forum_cells'>
    <input type='Submit' id='submit' name='submit' value='Invia' class='form_cp forum_cells_impl' style='margin: 0px; width: 400px;' onmouseover="Verifica();" />
    </td>
    </tr>
    </table>
    </form>
    Tralascio il file 'trucchi_ajax_ricerca.php' in quanto sono più che sicuro, dopo numerosi test, che non sia responsabile del bug.
    Webmaster di APOCALYPSE NOW!!! ( http://www.apocanow.it ).

    Uno dei più grandi siti di videogaming in Italia, 4000 visitatori unici giornalieri, una bellissima comunità di videogiocatori e tanti trucchi e soluzioni ti attendono!

  2. #2
    Ho condotto altri test, ed ho trovato la fonte dell'errore, anche se ancora non so come correggere

    if (document.forms[0] > "") {

    // ERRORE QUI
    stringa = PreparaDati();

    }
    else
    { stringa = ""; }
    L'errore è nello script ajaxthis();
    In pratica su IE viene eseguito PreparaDati() se c'è un form, invece su FF no
    Potreste spiegarmi il perchè? Grazie!
    Webmaster di APOCALYPSE NOW!!! ( http://www.apocanow.it ).

    Uno dei più grandi siti di videogaming in Italia, 4000 visitatori unici giornalieri, una bellissima comunità di videogiocatori e tanti trucchi e soluzioni ti attendono!

  3. #3
    non so corretto... ma se c'è un maggiore, l'elemento dopo il simbolo dovrebbe essere un numero..

    if (document.forms[0] > (int)0) oppure if (document.forms[0] > 3)

    document.forms ritorna un array di form, mentre document.forms[0] ritorna un array contenente gli elementi del primo form nella pagina cioè form[0], quindi credo , da quel che ho capito, devi controllare se document.forms[0] contiene elementi al suo interno e poi controllare se > (int)0 per poi preparare la stringa.
    Per una battaglia sono sempre a disposizione

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.