{"id":1482,"date":"2012-10-11T06:00:05","date_gmt":"2012-10-11T04:00:05","guid":{"rendered":"http:\/\/www.manuelmarangoni.it\/sir-bit\/?p=1482"},"modified":"2013-05-26T13:59:54","modified_gmt":"2013-05-26T12:59:54","slug":"ajax-chiamate-e-invio-post-a-siti-esterni","status":"publish","type":"post","link":"https:\/\/www.manuelmarangoni.it\/sir-bit\/1482\/ajax-chiamate-e-invio-post-a-siti-esterni\/","title":{"rendered":"Ajax &#8211; Chiamate e invio post a siti esterni"},"content":{"rendered":"<p>Le applicazioni Ajax, nel web, sono state una vera rivoluzione, visto che permettono di ricaricare un codice specifico senza dover fare il refresh completo della pagina.<br \/>\nSe ancora non avete ben chiaro come funziona l&#8217;Ajax o vi scontrate con la prima volta con questo meccanismo, vi invito a dare un&#8217;occhiata a un <a title=\"AJAX, PHP \u2013 Le basi di ajax: cos\u2019\u00e8 e come farlo interagire con php \u2013 Esempio completo | Sir Bit\" href=\"https:\/\/www.manuelmarangoni.it\/sir-bit\/?p=587\">mio vecchio articolo<\/a> prima di proseguire, dove mostro le basi del suo utilizzo con un esempio completo.<\/p>\n<p>In tempi recenti mi sono trovato nella situazione di dover &#8220;contattare&#8221; un server esterno usando Ajax, cio\u00e8 a <strong>dover effettuare una chiamata Ajax dal sito www.primosito.it al sito www.altrosito.it<\/strong> . E qui mi sono scontrato con la sua pi\u00f9 grossa limitazione.<br \/>\nPer questioni di sicurezza, infatti, questo tipo di chiamate esterne (che prendono il nome di <em>cross domain<\/em>) sono proibite dai browser. La limitazione \u00e8 utile per evitare reindirizzamenti da parte di craker, ma pu\u00f2 darci fastidio quando &#8211; per esempio &#8211; dobbiamo controllare la login dell&#8217;utente passando attraverso un sito (e un database) che non \u00e8 nostro.<\/p>\n<p>Fortunatamente esistono dei sistemi per aggirare il problema.<br \/>\nL&#8217;esempio in questo articolo mostra come <strong>inviare dei POST (le cui chiavi sono &#8220;email&#8221; e &#8220;password&#8221;) attraverso una chiamata Ajax<\/strong>.<br \/>\nPer la comprensione delle script si richiede che abbiate almeno una conoscenza di base dell&#8217;ajax. Si richiede inoltre che abbiate la possibilit\u00e0 di chiedere ai gestori del secondo server (dove risiede www.altrosito.it) di salvare una riga di codice nel loro file, che sar\u00e0 la pagina di ricezione dei post.<\/p>\n<h3 style=\"margin-top: 50px; margin-bottom: 20px; color: #c00;\">Chiamata.php<\/h3>\n<p>Innanzitutto scaricatevi l&#8217;ultima versione di jquery, che potete trovare a <a title=\"Sito ufficiale di Jquery per download\" href=\"http:\/\/jquery.com\/\" target=\"_blank\">questo indirizzo<\/a>.<br \/>\nIl nostro file di chiamata (presente sul nostro sito www.primosito.it) prender\u00e0 il nome di &#8220;chiamata.php&#8221;: qui dovrete includere il jquery scaricato:<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"javascript\" style=\"font-family: monospace;\"><span style=\"color: #339933;\">&lt;<\/span>script type<span style=\"color: #339933;\">=<\/span><span style=\"color: #3366cc;\">\"text\/javascript\"<\/span> src<span style=\"color: #339933;\">=<\/span><span style=\"color: #3366cc;\">\"jquery.js\"<\/span><span style=\"color: #339933;\">&gt;&lt;\/<\/span>script<span style=\"color: #339933;\">&gt;<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Adesso passiamo al codice vero e proprio della pagina.<br \/>\nAl click del link &#8220;premi&#8221;, sar\u00e0 avviata la funzione jquery, che effettuer\u00e0 la chiamata ajax. Come \u00e8 facile vedere, ho imposto che i parametri &#8220;email&#8221; e &#8220;password&#8221; siano inviati come POST.<br \/>\nQuesti sono gli <strong>unici elementi che dovrete modificare<\/strong> nello script, oltre all&#8217;url di destinazione: quest&#8217;ultimo dovr\u00e0 puntare alla pagina del secondo sito che si occuper\u00e0 di raccogliere i dati POST (nel nostro caso avr\u00e0 nome &#8220;risposta.php&#8221;).<br \/>\n<!--more--><\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"javascript\" style=\"font-family: monospace;\"><span style=\"color: #339933;\">&lt;<\/span>script<span style=\"color: #339933;\">&gt;<\/span>\r\njQuery<span style=\"color: #009900;\">(<\/span>document<span style=\"color: #009900;\">)<\/span>.<span style=\"color: #660066;\">ready<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000066; font-weight: bold;\">function<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\r\n\t$<span style=\"color: #009900;\">(<\/span><span style=\"color: #3366cc;\">'#click'<\/span><span style=\"color: #009900;\">)<\/span>.<span style=\"color: #660066;\">click<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000066; font-weight: bold;\">function<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\r\n\t\t$.<span style=\"color: #660066;\">ajax<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">{<\/span>\r\n\t\t  type<span style=\"color: #339933;\">:<\/span> <span style=\"color: #3366cc;\">\"POST\"<\/span><span style=\"color: #339933;\">,<\/span>\r\n\t\t  url<span style=\"color: #339933;\">:<\/span> <span style=\"color: #3366cc;\">\"http:\/\/www.altrosito.it\/risposta.php\"<\/span><span style=\"color: #339933;\">,<\/span>\r\n\t\t  data<span style=\"color: #339933;\">:<\/span> <span style=\"color: #009900;\">{<\/span> email<span style=\"color: #339933;\">:<\/span> <span style=\"color: #3366cc;\">\"prova@gmail.com\"<\/span><span style=\"color: #339933;\">,<\/span> password<span style=\"color: #339933;\">:<\/span> <span style=\"color: #3366cc;\">\"password\"<\/span> <span style=\"color: #009900;\">}<\/span>\r\n\t\t<span style=\"color: #009900;\">}<\/span><span style=\"color: #009900;\">)<\/span>.<span style=\"color: #660066;\">done<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000066; font-weight: bold;\">function<\/span><span style=\"color: #009900;\">(<\/span> messaggio <span style=\"color: #009900;\">)<\/span> <span style=\"color: #009900;\">{<\/span>\r\n\t\t  alert<span style=\"color: #009900;\">(<\/span> <span style=\"color: #3366cc;\">\"Data Saved: \"<\/span> <span style=\"color: #339933;\">+<\/span> messaggio <span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t\t<span style=\"color: #009900;\">}<\/span><span style=\"color: #009900;\">)<\/span>.<span style=\"color: #660066;\">fail<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000066; font-weight: bold;\">function<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span> <span style=\"color: #009900;\">{<\/span> alert<span style=\"color: #009900;\">(<\/span><span style=\"color: #3366cc;\">\"error\"<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span> <span style=\"color: #009900;\">}<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n\t<span style=\"color: #009900;\">}<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n\r\n<span style=\"color: #009900;\">}<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n<span style=\"color: #339933;\">&lt;\/<\/span>script<span style=\"color: #339933;\">&gt;<\/span>\r\n\r\n<span style=\"color: #339933;\">&lt;<\/span>a href<span style=\"color: #339933;\">=<\/span><span style=\"color: #3366cc;\">\"javascript:void(0)\"<\/span> id<span style=\"color: #339933;\">=<\/span><span style=\"color: #3366cc;\">\"click\"<\/span><span style=\"color: #339933;\">&gt;<\/span>Premi<span style=\"color: #339933;\">&lt;\/<\/span>a<span style=\"color: #339933;\">&gt;&lt;<\/span>br<span style=\"color: #339933;\">&gt;&lt;<\/span>br<span style=\"color: #339933;\">&gt;<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Cosa succeder\u00e0 se la chiamata avr\u00e0 successo? Tutto quello che sar\u00e0 stampato in &#8220;risposta.php&#8221; verr\u00e0 restituisto in &#8220;chiamata.php&#8221; (potrebbe essere il semplice echo di una stringa, oppure interi file xml, ecc.)<\/p>\n<h3 style=\"margin-top: 50px; margin-bottom: 20px; color: #c00;\">Risposta.php<\/h3>\n<p>Il file &#8220;risposta.php&#8221; si occuper\u00e0 di recuperare i POST inviati.<br \/>\nCome vedete di seguito, il trucco sta nella prima riga: la funzione <em>header()<\/em> indica quali siti lasciar passare. Nel nostro caso, <strong>con un asterisco lasceremo passare un qualsiasi sito<\/strong> che cerchi di contattare la pagina. Al posto dell&#8217;asterisco \u00e8 preferibile inserire l&#8217;indirizzo di un sito specifico (es: http:\/\/www.primosito.it), in modo da garantire una certa sicurezza al server.<\/p>\n<p><script type=\"text\/javascript\">\/\/ <![CDATA[\ngoogle_ad_client = \"ca-pub-9984963620559913\"; \/* Sir Bit - post singolo rettangolare *\/ google_ad_slot = \"5334366715\"; google_ad_width = 336; google_ad_height = 280;\n\/\/ ]]><\/script><br \/>\n<script type=\"text\/javascript\" src=\"http:\/\/pagead2.googlesyndication.com\/pagead\/show_ads.js\">\/\/ <![CDATA[\n\n\/\/ ]]><\/script><\/p>\n<p>Se tutto andr\u00e0 a buon fine, nel nostro sito come risposta avremo &#8220;Mail esatta&#8221;.<\/p>\n<div class=\"wp_syntax\">\n<table>\n<tbody>\n<tr>\n<td class=\"line_numbers\">\n<pre>1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10<\/pre>\n<\/td>\n<td class=\"code\">\n<pre class=\"php\" style=\"font-family: monospace;\"><span style=\"color: #990000;\">header<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #0000ff;\">'Access-Control-Allow-Origin: *'<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\r\n<span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #339933;\">!<\/span><span style=\"color: #990000;\">isset<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$_POST<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'email'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">)<\/span> <span style=\"color: #339933;\">||<\/span> <span style=\"color: #339933;\">!<\/span><span style=\"color: #990000;\">isset<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$_POST<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'password'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span>\r\n\t<span style=\"color: #b1b100;\">echo<\/span> <span style=\"color: #0000ff;\">\"Mancano i parametri\"<\/span><span style=\"color: #339933;\">;<\/span>\r\n\t<span style=\"color: #990000;\">die<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span>\t\r\n<span style=\"color: #009900;\">}<\/span>\r\n\r\n<span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #000088;\">$_POST<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'email'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">==<\/span><span style=\"color: #0000ff;\">'prova@gmail.com'<\/span> <span style=\"color: #339933;\">&amp;&amp;<\/span> <span style=\"color: #000088;\">$_POST<\/span><span style=\"color: #009900;\">[<\/span><span style=\"color: #0000ff;\">'password'<\/span><span style=\"color: #009900;\">]<\/span><span style=\"color: #339933;\">==<\/span><span style=\"color: #0000ff;\">'password'<\/span><span style=\"color: #009900;\">)<\/span>\r\n\t<span style=\"color: #b1b100;\">echo<\/span> <span style=\"color: #0000ff;\">\"Mail esatta\"<\/span><span style=\"color: #339933;\">;<\/span>\r\n<span style=\"color: #b1b100;\">else<\/span>\r\n\t<span style=\"color: #b1b100;\">echo<\/span> <span style=\"color: #0000ff;\">\"Errato!\"<\/span><span style=\"color: #339933;\">;<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>L&#8217;esempio in questo articolo mostra come inviare dei post a un sito esterno tramite una chiamata ajax. In genere, il browser blocca il tentativo per sicurezza<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[78],"tags":[41,12,11,4],"class_list":["post-1482","post","type-post","status-publish","format-standard","hentry","category-php-mysql","tag-ajax","tag-javascript","tag-jquery","tag-php","cat-78-id"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/1482"}],"collection":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/comments?post=1482"}],"version-history":[{"count":7,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/1482\/revisions"}],"predecessor-version":[{"id":1872,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/posts\/1482\/revisions\/1872"}],"wp:attachment":[{"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/media?parent=1482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/categories?post=1482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manuelmarangoni.it\/sir-bit\/wp-json\/wp\/v2\/tags?post=1482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}