Visualizzazione dei risultati da 1 a 10 su 10

Discussione: MVC e ajax

  1. #1
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    307

    MVC e ajax

    Ciao, mi sto avvicinando a PHP OOP, MVC e Ajax ma ho un problema.
    In una delle mie view c'e una select e in base alla selezione voglio fare una chiamata ad un metodo php e mostrare i dati. ma mi sono perso da qualche parte e non riesco a capire quale sia il percorso giusto che deve fare il codice. Credo sia abbastanza semplice da risolvere ma non capisco che metodo chiamare nella richiesta ajax e soprattutto se mi serve un nuovo metodo nel controller o no.
    Grazie

    Questa e la mia view

    codice:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Load Cars By Choice</title>
        <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
        <script type="text/javascript">
        $(document).ready(function (){
            $('#select').change(function (){
    
                    //debug
                    var model = $(this).val();
    
                    var str = "";
    
                    $("select option:selected").each(function(){
                        str += "<br/><div><b>Company Name: </b>" + $(this).text() + "</div><br/>";
    
                        var selection = $(this).text();
    
                        var carModelUrl = ".../my_mvc/index.php/loadCarsByChoice";
    
                        $.getJSON(carModelUrl, selection, function(json){
                            console.log("JSON: ", json);
                            str += "<table>";
    
                            for (var i = 0; i < json.length; i++) {
                                str += "<tr><td>" + (i+1) + " - " + json[i].BrandName +
                                "</td><td>" + json[i].Model +
                                "</td><td>" + json[i].Colour +
                                "</td><td><img src='../assets/" + json[i].BrandName + ".jpg'></img></td></tr>";
                            }
    
                            str += "</table>";
    
                            document.getElementById("placeholder").innerHTML=str;
    
                        });
                    });
                });
    })
    </script>
    </head>
    <body>
        <h1>Choose a car to see details</h1>
        <form>
            <select id="select">
                <?php
                for ($i=0; $i < count($data); $i++) { 
                    echo "<option value='".$data[$i]."'>".$data[$i]."</option>";
                }
                ?>
            </select>
        </form>
    
        <div id="placeholder"></div>
    </body>
    </html>
    questo e il controller

    codice:
        function loadCarsByChoice(){
            $data = $this->model->getBrandNames();
            $this->load->view('loadCarsByChoice', $data);
        }
    e questi sono due metodi che ho nel model (il primo getBrandNames() serve per mostrare i dati nella select, il secondo deve ricevere la richiesta ajax con il valore selezionato e ritornare i dati)

    codice:
    public function getBrandNames(){
    
            try{
    
                $sql = "SELECT DISTINCT BrandName FROM Cars";
                $stmt = $this->dbHandler->query($sql);
                
                $data = $stmt->fetch();
    
                $result = null;
    
                $i = 0;
    
    
                while($data = $stmt->fetch()){
                    $result[$i] = $data['BrandName'];
                    $i++;
                }
    
            }catch(PDOEXception $e){
                print new Exception($e->getMessage());
            }
    
            $this->dbHandler = NULL;
    
            return $result;
    
        }
    
        public function getCarDetails(){
            
            $carName = $_GET;
    
            try{
    
                $sql = "SELECT * FROM Cars WHERE BrandName = '". $carName . "'";
                $stmt = $this->dbHandler->query($sql);
    
                $result = null;
                $i = 0;
    
                while($data = $stmt->fetch()){
                    $result[$i]['BrandName'] = $data['BrandName'];
                    $result[$i]['Model'] = $data['Model'];
                    $result[$i]['Colour'] = $data['Colour'];
    
                    $i++;
                }
    
            }catch(PDOEXception $e){
                print new Exception($e->getMessage());
            }
    
            $this->dbHandler = NULL;
    
            return json_encode($result);
        }

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    10,343
    Stai usando CodeIgniter?

    Comunque, il giro da fare è: ajax chiama il metodo del controller, il controller chiama il metodo nel model, il model restituisce al controller i dati recuperati dal db opportunamente formattati (un array JSON va bene), il controller finisce con un echo dei dati ricevuti dal model, non con la chiamata di una view.

    Affinché AJAX riceva dei dati utilizzabili, questi vanno stampati con un echo, non devi chiamare nessuna view, perché resti su quella che ha effettuato la chiamata, AJAX si usa proprio per evitare di ricaricare la pagina.

  3. #3
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    307
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Affinché AJAX riceva dei dati utilizzabili, questi vanno stampati con un echo, non devi chiamare nessuna view, perché resti su quella che ha effettuato la chiamata, AJAX si usa proprio per evitare di ricaricare la pagina.
    grazie, questo era il pezzo che mi mancava! Appena ho un attimo provo.
    No, non sto usando codeigniter..seguendo un tutorial ho costruito un MVC da zero..

  4. #4
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    307
    eccomi..dunque..
    come faccio a recuperare il dato che appendo alla chiamata ajax?

    lo invio nella richiesta (è il "selection")

    codice:
    $.getJSON(carModelUrl, selection, function(json){
    ...
    }
    ma dall'altra parte, nel metodo del model, come recupero quel valore? se uso $_GET["selection"] mi da errore

    grazie!

  5. #5
    si ma come lo crei il selection?
    deve avere una struttura tipo questa:
    codice:
    var data = { 
        "nome": "NOME", 
        "cognome": "COGNOME", 
        "eta": 20  
    }; 
     
    $.getJSON(URL, data, function (result) { 
        ...... 
    });

  6. #6
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    307
    Quote Originariamente inviata da fermat Visualizza il messaggio
    si ma come lo crei il selection?
    deve avere una struttura tipo questa:
    codice:
    var data = { 
        "nome": "NOME", 
        "cognome": "COGNOME", 
        "eta": 20  
    }; 
     
    $.getJSON(URL, data, function (result) { 
        ...... 
    });
    nel primo post c'è il codice completo. lo riporto qui. la select funziona correttamente

    codice:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Load Cars By Choice</title>
        <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
        <script type="text/javascript">
        $(document).ready(function (){
            $('#select').change(function (){
    
                    //debug
                    var model = $(this).val();
    
                    var str = "";
    
                    $("select option:selected").each(function(){
                        str += "<br/><div><b>Company Name: </b>" + $(this).text() + "</div><br/>";
    
                        var selection = $(this).text();
    
                        var carModelUrl = ".../my_mvc/index.php/loadCarsByChoice";
    
                        $.getJSON(carModelUrl, selection, function(json){
                            console.log("JSON: ", json);
                            str += "<table>";
    
                            for (var i = 0; i < json.length; i++) {
                                str += "<tr><td>" + (i+1) + " - " + json[i].BrandName +
                                "</td><td>" + json[i].Model +
                                "</td><td>" + json[i].Colour +
                                "</td><td><img src='../assets/" + json[i].BrandName + ".jpg'></img></td></tr>";
                            }
    
                            str += "</table>";
    
                            document.getElementById("placeholder").innerHTML=str;
    
                        });
                    });
                });
    })
    </script>
    </head>
    <body>
        <h1>Choose a car to see details</h1>
        <form>
            <select id="select">
                <?php
                for ($i=0; $i < count($data); $i++) { 
                    echo "<option value='".$data[$i]."'>".$data[$i]."</option>";
                }
                ?>
            </select>
        </form>
    
        <div id="placeholder"></div>
    </body>
    </html>

  7. #7
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    307
    up (e buona pasqua!)

  8. #8
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    307
    nessuno?

  9. #9
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,083
    Ti hanno già risposto. Il secondo parametro di getJSON() deve essere un oggetto con le coppie chiave-valore da inviare al server

  10. #10
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    307
    ok ma non mi è chiaro come leggerlo dall'altra parte (cioè nel metodo che chiamo)..con un $_GET[] ?

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