Oggi vediamo come effettuare chiamate Ajax utilizzando il famoso framework jQuery. Per prima cosa scarichiamo jQuery dal sito ufficiale e includiamo il file nella nostra pagina web:
Ora diamo un’occhiata al file PHP al quale faremo la richiesta con Ajax. Il file PHP riceverà un ID integer e ci restituirà una risposta in formato testo, risposta, che visualizzeremo nel div con ID univoco “output“:
Ecco che, con poche righe jQuery, possiamo effettuare la richiesta:
Modificando il valore del parametro id in data, magari inserendo dati in input tramite un form, visualizzeremo il messaggio opportuno a seconda del parametro inviato, in questo caso, un numero intero (1,2 o 3). La risposta testuale fornita dal file PHP è contenuta nel parametro response e la visualizziamo nel div output tramite la riga:
$("#output").html(response);
Questo è un semplice esempio ma, con altrettanta semplicità, potremo realizzare applicazioni complesse senza scrivere un’infinità di righe di codice grazie a un potente framework come jQuery 😉
Pratica ed essenziale come guida.
Io preferisco sempre fare $.post che fa lo stesso lavoro del tuo esempio solamente che passa i dati in POST e non in GET.
ciao
Ciao,
esiste un modo sicuro per far si che il file php possa essere richiamato solo in ajax dalle pagine del mio dominio e non direttamente?
Penso ke con un htaccess si possa fare ma non so che scrivere 😛
interessante, anni fa per usare ajax mi son sempre scritto tutto il codice jscript a manina, senza usare alcun framework e devo dire che c’e’ una bella differenza, nel senso che si scrive molto meno codice! 😀
grazie per la pillola!
@evilripper bè non c’è nulla di male, io mi diverto sempre a scrivermi i framework da zero 😉
@StefanoV bah, direi che impostando qualche regola in htaccess potresti realizzare la cosa anche se, scusa la curiosità, vuoi inibire il PHP per farlo richiamare solo da Ajax, cambia qualcosa? Cosa vuoi realizzare di preciso?
@StefanoV, conconrdo con EmaWebDesign non capisco quali siano le tue precise ragioni di questo.
ciao
Vi spiego,
vorrei che le mie pagine non siano accessibili in una nuova finestra richiamate direttamente, ma solo tramite ajax dalle pagine del mio sito.
Il motivo:
Se un utente malintenzionato legge in qualke modo il percorso ad esempio per eliminare una sezione del mio sito tramite la pagina in ajax, anche se io inserisco il controllo admin nel file php richiamato in ajax, il malintenzionato potrebbe benissimo inviarmi un email con un link camuffato da tinyUrl che punta alla cancellazione della sezione, ed io aprendolo, essendo gia loggato da admin avrei fatto la frittata…
Questo tipo di attacco lo avevo gia segnalato al CMS Flatnuke, che hanno corretto integrando la parte che elimina nel file php senza ajax e cosi hanno potuto inserire un “confirm” che dice “sei sicuro di voler eliminare ….” e cosi diciamo che hanno aggirato l’ostacolo…
Siccome il mio CMS andrà in mano di clienti inesperti, non posso rischiare che qualcuno che non ha nulla da fare mi fa questo attacco…
Per questo volevo bloccare le richieste ad esempio a tutta la cartella che contiene i file richiamati in ajax, cosi non possono essere richiamati direttamente…
Mi sapreste aiutare sulle right dell’htaccess da scrivere?
@StefanoV ma il problema prescinde dal richiamare direttamente un file PHP. Devi lavorare sulla sicurezza dell’applicazione, mica c’è bisogno di inibire i file php?
Ad esempio, puoi inviare via Ajax una variabile di sicurezza che, una volta letta dal PHP, consente di eseguire l’operazione richiesta. Certo, è un consiglio molto generico ma, non conoscendo la natura e la struttura della tua applicazione non saprei cosa consigliarti.
Tra l’altro, non ho capito bene il discorso dell’email contenente il link tipo tinyurl.
Anche con la variabile di sicurezza il problema c’è ancora…
ti faccio un esempio, se tu richiamando il file in ajax “ajax/elimina.php?id=2” elimini la sezione numero 2 del tuo sito, se qualcuno richiama questo indirizzo ti cancella la sezione 2…
Soluzione: controllare con una variabile di sicurezza o in sessione se si è admin, e se si allora elimina, altrimenti no… Ok fin qui tutto ok…
Che succede se a te, che sei gia loggato come admin, mando una email con scritto:
Ciao ho lasciato un commento nel tuo sito ma ancora non mi hai risposto, forse non ti funzionano le notifiche, qui il link: …..ajax/elimina.php?id=2 (ovviamente questo url lo camuffo con tinyurl) ..
Succede che essendo già loggato da admin, ti auto-cancelli la sezione 2…
Se invece riuscissi a fare ciò che dico io, ti apparirebbe: “Impossibile richiamare il file direttamente”
Dimmi se hai capito ora 😉
@StefanoV ovviamente, il discorso sicurezza è un discorso che riguarda l’area admin e la fase di login. Da sottolineare anche se scontato.
Per la pagina richiamata da Ajax, potresti fare una pagina intermedia che visualizza un riepilogo dei dati e la richiesta di conferma cancellazione. In caso di click (quindi di conferma) si genera un codice che deve essere obbligatoriamente letto dalla terza pagina, quella che esegue la cancellazione. Se trova il codice esegue la cancellazione.
Ovviamente, è la prima soluzione che mi è venuta in mente, se mi viene in mente una soluzione migliore ti avverto 😉
A dire il vero, la chiamata Ajax potrebbe immediatamente visualizzare una finestra di conferma che genera un codice di sicurezza in caso di “ok”.
Senza leggere il codice la pagina PHP non esegue la cancellazione e ci risparmiamo la pagina intermedia.
Quindi al click appare la conferma, e se si conferma setto con json una variabile in sessione, e dal php cancello solo se la trovo, e infine la cancello.
Ho capito bene? 😉
Per la pagina intermedia invece alla fine è una scocciatura, per questo cercavo l’htaccess 😛
Soluzione by Undolog 🙂
http://www.undolog.com/2010/03/17/very-short-snippet-come-identificare-le-chiamate-ajax-in-php
Perfetto, proprio quello che cercavo!!!
Grazie mille, lo provo e ti faccio sapere 😉
Provato!!! E’ perfetto, grazie ancora! 😉
@StefanoV grazie ad Undolog ovviamente 😉
[…] “jQuery Ajax: come effettuare richieste Ajax tramite jQuery” abbiamo visto come poter effettuare delle chiamate Ajax utilizzando il noto framework […]