Back to top

Autore Topic: [j!1.7] Usare AJax in un componente  (Letto 3537 volte)

Offline Alhazred

  • Appassionato
  • ***
  • Post: 289
    • Mostra profilo
[j!1.7] Usare AJax in un componente
« il: 29 Ago 2011, 13:32:03 »
Ho un problema con una richiesta Ajax nel mio componente, dovrei fare in modo che la risposta appaia in un div che ho di fianco a quello contenente la form, ma invece mi si ricarica la pagina e vedo solo la risposta, la form sparisce.

Un po' di codice
Codice: [Seleziona]
//mi genera l'oggetto xhr
function ajaxRequest()
{
    //bla bla
}

function checkForm()
    {
        var form = document.getElementById('preventivolibro');
        var avvisi = document.getElementById('avvisivcm');
       
        //check sulla compilazione della form

        //richiesta ajax
        var mypostrequest = new ajaxRequest()
        mypostrequest.onreadystatechange = function()
        {
            if (mypostrequest.readyState == 4)
            {
                if (mypostrequest.status == 200 || window.location.href.indexOf("http") == -1)
                {
                    document.getElementById("risultatopreventivo").innerHTML = mypostrequest.responseText;
                }
                else
                {
                    alert("An error has occured making the request");
                }
            }
        }

        //qui genero la stringa coi parametri da inviare

       //invio la richiesta
        mypostrequest.open("POST", "index.php", true);
        mypostrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        mypostrequest.send(parameters);
        return false;
    }
//intestazione form
<form name='preventivo' id='preventivo' method='post' action='#'>

//e in fine
<input type="hidden" name="task" value="calcola" />
<input type="hidden" name="option" value="<?php echo $this->option?>" />
<input type="submit" class="button" id="button" name='submit' value='Calcola' onclick='return checkForm()' />
Lo script php (implementato con una funzione dentro al file controller.php) genera semplicemente una stringa contenente le coppie nome-valore dei parametri ricevuti e la butta fuori correttamente con una echo, non fa altro.

Ci vedete qualcosa di strano?
Altrimenti cosa devo mostrarvi per controllare se ci sono problemi?
« Ultima modifica: 29 Ago 2011, 13:34:21 da Alhazred »

Offline Alhazred

  • Appassionato
  • ***
  • Post: 289
    • Mostra profilo
Re:[j!1.7] Usare AJax in un componente
« Risposta #1 il: 29 Ago 2011, 15:07:14 »
Ho trovato alcuni errori nel codice javascript e la richiesta in realtà partiva dalla form direttamente dato che aveva i campi hidden option e task, ora è così
Codice: [Seleziona]
[code]//mi genera l'oggetto xhr
function ajaxRequest()
{
    //bla bla
}

function checkForm()
    {
        var form = document.getElementById('preventivolibro');
        var avvisi = document.getElementById('avvisivcm');
       
        //check sulla compilazione della form

        //richiesta ajax
        var mypostrequest = new ajaxRequest()
        mypostrequest.onreadystatechange = function()
        {
            if (mypostrequest.readyState == 4)
            {
                if (mypostrequest.status == 200 || window.location.href.indexOf("http") == -1)
                {
                    document.getElementById("risultatopreventivo").innerHTML = mypostrequest.responseText;
                }
                else
                {
                    alert("An error has occured making the request");
                }
            }
        }

        //qui genero la stringa coi parametri da inviare

       //invio la richiesta
        mypostrequest.open("POST", "index.php?option=<?php echo $this->option ?>&task=calcola", true); //ho aggiunto qui i parametri option e task
        mypostrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        mypostrequest.send(parameters);
    }
//intestazione form
<form name='preventivo' id='preventivo' method='post' action='#'>

//e in fine

//qui non ci sono più i campi hidden con i parametri option e task
<input type="submit" class="button" id="button" name='submit' value='Calcola' onclick='return checkForm()' />
la richiesta parte, ma quando torna la risposta invece della stringa si aggiunge un'altra pagina sopra quella esistente.
La funzione dentro a controller.php ha solo l'istruzione
echo "pippo 123";

Da cosa può dipendere?

Offline Alhazred

  • Appassionato
  • ***
  • Post: 289
    • Mostra profilo
Re:[j!1.7] Usare AJax in un componente
« Risposta #2 il: 29 Ago 2011, 15:24:08 »
A quanto pare la funzione calcola() nel file controller.php non viene chiamata.

Avete idea del perché? Non dovrebbero bastare i parametri option e task?

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:[j!1.7] Usare AJax in un componente
« Risposta #3 il: 29 Ago 2011, 15:44:52 »
hai provato a chiamare direttamente la pagina, magari da una form html per simulare il post? non vorrei che funzionasse ma che tu non te ne accorga dato che restituisce l'intera pagina joomla.

se ti serve in output solo 'pippo123' allora devi aggiungere alla richiesta &tmpl=component

ciao,
marco

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline tampe125

  • Appassionato
  • ***
  • Post: 366
    • Mostra profilo
Re:[j!1.7] Usare AJax in un componente
« Risposta #4 il: 29 Ago 2011, 15:45:43 »
ho dato una scorsa velocissima, ma...
perchè non ti affidi a Mootools? in questo modo ti semplifichi la vita
www.fabbricabinaria.it
Soluzioni originali ad esigenze quotidiane

Offline Alhazred

  • Appassionato
  • ***
  • Post: 289
    • Mostra profilo
Re:[j!1.7] Usare AJax in un componente
« Risposta #5 il: 29 Ago 2011, 15:46:59 »
ho dato una scorsa velocissima, ma...
perchè non ti affidi a Mootools? in questo modo ti semplifichi la vita
Non ho idea di come si faccia.
Indicazioni?

Offline Alhazred

  • Appassionato
  • ***
  • Post: 289
    • Mostra profilo
Re:[j!1.7] Usare AJax in un componente
« Risposta #6 il: 29 Ago 2011, 16:09:46 »
hai provato a chiamare direttamente la pagina, magari da una form html per simulare il post? non vorrei che funzionasse ma che tu non te ne accorga dato che restituisce l'intera pagina joomla.

se ti serve in output solo 'pippo123' allora devi aggiungere alla richiesta &tmpl=component

ciao,
marco
Aggiungendo &tmpl=component mi appare ciò che mi serviva, era quello il problema, grazie :)

Comunque accetto indicazioni su mootools se mi elimina il codice Ajax scritto da me.

Offline tampe125

  • Appassionato
  • ***
  • Post: 366
    • Mostra profilo
Re:[j!1.7] Usare AJax in un componente
« Risposta #7 il: 29 Ago 2011, 16:47:20 »
http://docs.joomla.org/Ajax_using_MooTools

che versione di joomla stai utilizzando? il wiki è stato scritto per la 1.5; cmq il funzionamento con la 1.7 è più o meno simile, cambiano solo i nomi delle funzioni.
www.fabbricabinaria.it
Soluzioni originali ad esigenze quotidiane

 



Web Design Bolzano Kreatif