Chiamate AJAX con jQuery

Chiamate AJAX con jQuery

Write Less Do More

Motto di jQuery

Per quanto riguarda le chiamate AJAX di cui abbiamo parlato nel seguente articolo: Chiamate AJAX possiamo notare il risparmio in numero di righe di codice per effettuare e gestire le chiamate

Prerequisiti per le chiamate AJAX con jQuery

Un server Apache HTTP ed un server MySQL (tipo LAMP, MAMP o XAMPP)

La libreria jQuery scaricabile dal sito www.jquery.com

Conoscenza di HTML, Javascript, PHP e MySQL

Richiedere un file HTML

Utilizzeremo questa semplice pagina web per richiamare il contenuto di un file html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Request HTML</title>
</head>
<body>
<div id="content">

</div>
<button id="fetch-data">Carica i dati</button>
<script src="js/jquery-3.6.1.js"></script>
<script src="js/request-html.js"></script>
</body>
</html>

Nota: il file jquery-3.6.1.js deve essere incluso prima del/i files che utilizzeranno jQuery.

Il file request-html.js :

function loadData(){
    $.get('data/data.html')
        .done(function(data){
            $('#content').html(data);
        })
        .fail(function(){
            $('#content').html('<p>riprova più tardi</p>')
        });
}
$('#fetch-data').on('click',function(){
    loadData();
});

utilizziamo il metodo get di jQuery in cui specifichiamo il percorso del file sul server, i metodi done e fail come è facilmente intuibile contengono le istruzioni da eseguire in caso di successo o di insuccesso. Tutto questo è all’interno di una funzione loadData()che viene richiamata quando l’utente clicca sul bottone con id=fetch-data

il contenuto del file data.html contiene una semplice tabella

<table border="solid">
  <tr>
    <th>Autore</th>
    <th>Titolo</th>
  </tr>
  <tr>
    <td>Carlos Castaneda</td>
    <td>Viaggio ad Ixtlan</td>
  </tr>
  <tr>
    <td>Carlos Castaneda</td>
    <td>L'Isola del Tonal</td>
  </tr>
</table>

Visualizzare un file JSON

Modifichiamo il file Javascript nel seguente modo

function loadData(){
    var content=' ';
    $.getJSON('data/books.json')
    .done(function(data){
        $.each(data.books,function(key,val){
            content+='<h3>'+val.title+'</h3>';
            content+='<p>'+val.author+'</p>';
        });
        $('#content').html(content);
    });
}
$('#fetch-data').on('click',function(){
    loadData();
});

In questo caso utilizziamo il metodo getJSON cui passiamo come parametro il percorso del file JSON sul server.

Nel metodo done creiamo una funzione anonima in cui tramite il metodo each che è un iteratore assegnamo chiave (key) e valore (val) alle rispettive variabili. La struttura del file JSON è la seguente

{
  "books": [
    {"title":"Viaggio ad Ixtlan","author":"Carlos Castaneda"},
    {"title":"L'isola del Tonal","author":"Carlos Castaneda"}
  ]
}

quindi leggiamo le chiavi title e author di val. data.books (riga 5 nel file js )fa riferimento al fatto che la collezione si chiama books nel file (riga 2 del file JSON)

Ricezione di un file JSON da un script PHP e MySQL

Dumb del mini database per le prove

Script PHP che interroga il database e genera un file JSON

<?php
include '../config/db_connect.php';
$sql="SELECT * FROM articles";
$result=$conn->query($sql);
if($result->num_rows>0){
    $i=0;
    $data=array();
    while($row=$result->fetch_assoc()){
        $data[]=$row;
    }
    echo json_encode($data);
}else{
    echo "non ci sono risultati";
}
$conn->close();

File Javascript che lancia la chiamata e visualizza la risposta come contenuto html

function loadData(){
    var content=' ';
    $.getJSON('src/list-articles.php')
    .done(function(data){
        $.each(data,function(key,val){
            content+='<h3>'+val.title+'</h3>';
            content+='<p>'+val.body+'</p>';
        });
        $('#content').html(content);
    });
}
$('#fetch-data').on('click',function(){
    loadData();
});

Inviare parametri ad uno script PHP e MySQL e leggere la risposta

In questo caso modifichiamo la pagina web aggiungendo una casella per l’input del parametro che vogliamo inviare al server

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Query - Metodo POST</title>
</head>
<body>
    Parole da cercare nel titolo
    <input type="text" id="title">
    <div id="content">

    </div>
    <button id="fetch-data">Carica i dati</button>
    <script src="js/jquery-3.6.1.js"></script>
    <script src="js/post-query.js"></script>
</body>
</html>

Prima di vedere il file Javascript che effettuerà la chiamata riporto lo script PHP che interrogherà il database utilizzando come criterio per la selezione il parametro inviato dal client (la parola che deve essere contenuta nel titolo) che il server memorizzerà nell’array super globale POST: $_POST["title"]

<?php
include '../config/db_connect.php';
$title = $_POST["title"];
$sql="SELECT * FROM articles WHERE title LIKE '%$title%'";
$result=$conn->query($sql);
if($result->num_rows>0){
    $i=0;
    $data=array();
    while($row=$result->fetch_assoc()){
        $data[]=$row;
    }
    echo json_encode($data);
}else{
    echo "non ci sono risultati";
}
$conn->close();

Per la chiamata AJAX in questo caso utile il metodo .ajax che utilizza la sintassi chiave valore

function loaddata(){
    var url="src/select-articles.php";
    var queryString='title='+$('#title').val();
    var content='';
    $.ajax({
        type: "POST",
        url: url,
        data: queryString,
        beforeSend: function(){
            $('body').append('<div id="loading">Loading...</div>');
            // effetto animato
        },
        complete: function(){
            $('#loading').remove();
            // togliere al completamento della richiesta
        },
        success: function(data){
            var obj=jQuery.parseJSON(data);
            $.each(obj,function(key,val){
                content+='<h3>'+val.title+'</h3>';
                content+='<p>'+val.body+'</p>';
            });
            $('#content').html(content);
        },
        fail: function(){
            $('#content').html('<div>Spiacenti, riprova più tardi</div>');
        }

    });

}
$('#fetch-data').click(function(){
    loaddata();
});

Di seguito la spiegazione di ogni copia chiave-valore dello script

typeil tipo di invio dati
urlil percorso sul server dove è presente lo script o i file (JSON, XML, HTML)
datai parametri da inviare nella forma query string
beforeSendle istruzioni da eseguire prima dell’invio dei dati
successle istruzioni da eseguire in caso di successo
complete cosa fare al completamento della chiamata
faille istruzioni da eseguire in caso di insuccesso
chiavi-valori metodo AJAX jQuery

Pubblicato da Carlo Contardi

Carlo Contardi, docente di informatica e sviluppatore Full Stack, condivide la sua passione per la programmazione e l’informatica attraverso il suo blog Space Coding. Offre preziosi consigli e soluzioni pratiche a chi vuole imparare a programmare o migliorare le proprie abilità. 🚀👨‍💻

Translate »