Back to top

Autore Topic: [RISOLTO]Jquery con richiesta AJAX nella view di un componente MVC.  (Letto 5158 volte)

Offline alexdi

  • Appassionato
  • ***
  • Post: 304
  • Sesso: Maschio
  • M5S , forse riusciamo a mandarli tutti a casa !!
    • Mostra profilo
Un saluto a tutti.


Premetto che ho già visto in giro un po di post e tutorial veramente molto interessanti su JQuery (a cui mi sono "avvicinato" da pochissimo) ma sono un pò arenato...


Ho fatto alcune prove come per esempio inserire il seguente codice nel template di default del componente.
Codice: [Seleziona]

<script type="text/javascript">


jQuery(document).ready(function(){
  jQuery("button").click(function(){
    jQuery.ajax({url:"components/com_vtigerbridge/models/demo_ajax_load.txt",dataType:"text",success:function(result){
     jQuery("#jquery").html(result);
    }});
  });
});
</script>


<div id="jquery">Let AJAX change this text<>
<button>Change Content</button>



Tutto funziona regolarmente. Il div viene riscritto con il contenuto del file txt.

Quello che però non riesco a capire  è come fare per utilizzare per esempio una funzione php nel model, che mi ritorni dei dati per esempio da una tabella.

In sostanza, non ho ben capito come bisogna "strutturare" la richiesta ajax per ricevere i dati da una funzione presente nel model e se in effetti si può fare (ma credo proprio di si).

Magari se ci lavoro un pò ci arrivo.

Però, anche se l' argomento non riguarda proprio joomla!, penso che già altri della comunità abbaino avuto occasione di provarci e con qualche spunto , forse ci impiego meno di un secolo ;D


Grazie 1000 in anticipo e comunque sia.
« Ultima modifica: 06 Set 2012, 23:39:33 da alexdi »
Non è la specie più intelligente a sopravvivere e nemmeno quella piu' forte. E' quella più predisposta al cambiamento. Charles Darwin

Blog Personale

Offline Crite

  • Nuovo arrivato
  • *
  • Post: 42
  • Sesso: Maschio
    • Mostra profilo
Re:Jquery con richiesta AJAX nella view di un componente MVC.
« Risposta #1 il: 06 Set 2012, 08:28:57 »
Ciao Alexdi,

Spero di aver capito la tua domanda e cerco il modo più semplice per risponderti.
Ipotizziamo che questa sia la tua chiamata ajax:

    $("#bottone").click(function() {
        $.ajax({
        type: "POST",
        url: "test.php",
        success: elabora_risultato(xml),
        error: function(xhr, ajaxOptions, thrownError){
             alert(xhr.statusText);
                alert(xhr.responseText);
                alert(xhr.status);
                alert(thrownError);

          }
            });
    });


 con questa chimata verrà elaborato il file test.php il quale produrrà come risultato un oggetto XML ( in questo caso) o se vuoi anche JSON.(vengono utilizzati questi standard per convenzione e facilità di utilizzo).
Nel file test.php avrai quanto segue:

<?php
 
 ......interogazione del database......(ipotizziamo di estrarre dal DB le stringhe "prova" in $var1 e "prova2" in $var2)

echo "<xml>";
echo "<ris>";
echo "<dato>$var1</dato>";
echo "<dato2>$var2</dato2>";
echo "</ris>";
echo "</xml>";

?>

Quando il server web finisce di elaborare il file test.php restituisce in input alla chiamata ajax la risposta xml...

<xml>
 <ris>
<dato>prova</dato>
 <dato2>prova2</dato2>
</ris>
</xml>

L'opzione success: della chiamata di JQuery ti permette di passare questo oggetto ad una funzione (in questo caso elabora_risultato(), con la quale potrai "parsare" ed elaborare il tuo oggetto.

elabora_risultato(xml){
        //Elaboro l'xml e mi scorro tutte i tag "ris" che trovo
          $(xml).find('ris').each(function() {
               var dato=$(this).find('dato').text();
               var dato2=$(this).find('dato2').text();
 
                 ......fai quello che vuoi con le tue variabili ;)

         
        });
}


Spero di esserti stato di aiuto....

Ciao


Offline alexdi

  • Appassionato
  • ***
  • Post: 304
  • Sesso: Maschio
  • M5S , forse riusciamo a mandarli tutti a casa !!
    • Mostra profilo
Re:Jquery con richiesta AJAX nella view di un componente MVC.
« Risposta #2 il: 06 Set 2012, 23:39:05 »
Ciao Crite e grazie per la risposta.

Quello che hai descritto ero riuscito a farlo e funzionava tutto.

Quello che non riuscivo a fare era strutturare il tutto rispettando il modello MVC di joomla. Sono riuscito a risolvere ma poi non mi sono ricordato di aggiornare il post tranne ora che ho visto una notifica sulle email per via della tua risposta.

La cosa era abbastanza semplice e intuitiva (il che mi lascia un pò perplesso sul fatto che veramente nessuno del forum abbia mai affrontato un problema del genere...nessuna polemica perbacco  ;) ).

Ad ogni modo è sufficente inserire nell' url il task che si vuole far eseguire al controller, preceduto dal 'dot', il punto.

p.e.
Codice: [Seleziona]
url: "test.php$task=.RichiestaAjax"

Se non si vuole utilizzare il Controller di default, aggiungeremo anche il Controller nella richiesta (...&controller=xxxxx) e allo stesso modo possiamo inserire tutti i parametri che ci servono per la richiesta (parametri che possiamo poi estrarre con JRequest sul Controller e/o Model)

Ora , non rimane altro che scrivere una funzione php nel Controller che chiameremo RichiestaAjax() e che verrà quindi richiamata dalla richiesta ajax presente nella view del componente.

Rispettando la logica MVC, questa funzione richiamerà altra funzione che inserisco nel Model e che eseguirà l' interrogazione del database ritornado il risultato con una echo ed opportunamente formattato , per esempio json con la funzione json_encode().

Funziona tutto perfettamente e, non dovendo ricaricare la view ogni volta, la velocità migliora nettamente.

Grazie ancora Crite per il tuo interessamento.

Non è la specie più intelligente a sopravvivere e nemmeno quella piu' forte. E' quella più predisposta al cambiamento. Charles Darwin

Blog Personale

mau_develop

  • Visitatore
Prova a ribaltare la tua considerazione:
... nessuno del forum abbia mai affrontato un problema del genere... (forse perchè)....La cosa era abbastanza semplice e intuitiva

Chi conosce come si sviluppa legge, e risolve perchè come dici è semplice;  e chi non lo sa, anche se glielo spieghi non ci capirà mai nulla.

M.

Offline alexdi

  • Appassionato
  • ***
  • Post: 304
  • Sesso: Maschio
  • M5S , forse riusciamo a mandarli tutti a casa !!
    • Mostra profilo
Esatto mau. Hai perfettamente ragione.

E che a volte ti blocchi su delle cavolate, te ne rendi conto , ti prende lo smarrimento e allora magari provi a chiedere......ne ero consapevole proprio mentre lo scrivevo, e non è nemmeno la prima volta che mi capita di perdermi!

Comunque ribadisco: non era assolutamente una polemica anzi, leggendo questo forum ho sempre trovato grande disponibilità , fra l'altro  gratuita,  e una marea di informazioni utili e chiare.

Ciao.
Non è la specie più intelligente a sopravvivere e nemmeno quella piu' forte. E' quella più predisposta al cambiamento. Charles Darwin

Blog Personale

 



Web Design Bolzano Kreatif