Le chiamate AJAX classiche lavorano con l’oggetto XMLHTTPREQUEST (XHR). La maggior parte dei browser non consenton ad XHR di accedere ad altri server, o meglio a domini diversi rispetto a quello da cui parte la chiamata. Pero ovviare a questa limitazione è stato invantato JSONP, ovvero il JSON viene avvolto all’interno di una chiamata a una funzione. Invece di fare una richiesta AJAX, viene aggiunto un elemento script che punta allo script JSONP all’interno del documento HTML e una funzione di callback viene chiamata per accedere allo script.
Ovviamente attenzione perché i vendors hanno fatto questa scelta per motivi di sicurezza: infatti no c’è nessuna validazione del codice prima dell’esecuzione, quindi serve cautela.
<!DOCTYPE html> <html lang="en"> <head> <title>JSONP</title> </head> <body> <h2>Premi il bottone per effettuare una richiesta.</h2> <button id="trigger">GET</button> <br> <div id="target"></div> <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> <script> $(document).ready(function() { $('#trigger').click(function() { $.getJSON('http://search.twitter.com/search.json?q=jquery&callback=?', function(data) { $.each(data.results, function(index, value) { $('#target').append(value.text + '<br>'); }); }); }); }); </script> </body> </html>
La maggor parte del codice dovrebbe essere chiara alla luce dei post precedenti.
Per impostazione predefinita, il gestore JSONP in jQuery cerca il parametro callback=? nella stringa di query. Il “?” viene sostituito con una funzione di callback jQuery generato da inserire nel JSONP dal server È possibile modificare le impostazioni se il parametro ha un altro nome di callback o quando il metodo di callback non è parametrizzato. Il miglior consiglio è quello di evitare, quando possibile JSONP
L’esempio