<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blogrammazione &#187; AJAX</title>
	<atom:link href="http://www.marcolecce.com/blog/category/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.marcolecce.com/blog</link>
	<description>Programmazione, PHP, JAVA, ASP, Linux, Windows, Ajax, Web 2.0, Web 3.0</description>
	<lastBuildDate>Thu, 22 Jul 2010 13:06:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>ExtJs, inviare un array nelle chiamate Ajax</title>
		<link>http://www.marcolecce.com/blog/2010/05/19/extjs-inviare-un-array-in-ajax/</link>
		<comments>http://www.marcolecce.com/blog/2010/05/19/extjs-inviare-un-array-in-ajax/#comments</comments>
		<pubDate>Wed, 19 May 2010 15:48:37 +0000</pubDate>
		<dc:creator>marco</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ext Js]]></category>

		<guid isPermaLink="false">http://www.marcolecce.com/blog/?p=259</guid>
		<description><![CDATA[Le chiamate asincrone sono ormai un fondamento delle interfacce web, e praticamente tutti i principali framework javascript in circolazione forniscono degli strumenti embedded che semplificano lo sviluppo e automatizzano la maggior parte delle impostazioni. ExtJs è un framework javascript che è riuscito ad ottenere forti consensi nell’ambito dello sviluppo di interfacce web: questo grazie soprattutto [...]]]></description>
			<content:encoded><![CDATA[<p>Le chiamate asincrone sono ormai un fondamento delle interfacce web, e praticamente tutti i principali framework javascript in circolazione forniscono degli strumenti embedded che semplificano lo sviluppo e automatizzano la maggior parte delle impostazioni.</p>
<p><a title="ExtJS" href="http://www.extjs.com/">ExtJs</a> è un framework javascript che è riuscito ad ottenere forti consensi nell’ambito dello sviluppo di interfacce web: questo grazie soprattutto alla potenza del prodotto e alla comunità decisamente attiva che fornisce un importante supporto agli sviluppatori.</p>
<p>Il meccanismo implementato da questo  framework per eseguire chiamate<a title="Ajax" href="http://it.wikipedia.org/wiki/AJAX" target="_blank"> Ajax</a> è estremamente semplice ed intuitivo, meccanismo che tra le altre cose ricorda molto da vicino quello adottato da altri framework javascript come <a title="JQuery" href="http://jquery.com/" target="_blank">JQuery</a>. Vediamone un esempio:</p>
<p style="text-align: left;">Ext.Ajax.request({<br />
[…]<br />
url: &#8216;pagina.php&#8217;,<br />
params: {id: ‘3’},<br />
success: function(resp) {<br />
[…]<br />
} ,<br />
failure: function(a, b) {<br />
[…]<br />
}<br />
});</p>
<p>Con queste poche righe di codice, <a title="ExtJS" href="http://www.extjs.com/">ExtJs</a> ci permette di eseguire una chiamata <a title="Ajax" href="http://it.wikipedia.org/wiki/AJAX">Ajax</a> verso l’indirizzo specificato nel parametro di configurazione “url” (pagina.php) e di gestire sia il caso di risposta positiva sia il caso di insuccesso.<br />
“params” invece permette di specificare i parametri che verranno inviati al file “pagina.php” durante la chiamata <a title="Ajax" href="http://it.wikipedia.org/wiki/AJAX">Ajax</a>: nel nostro esempio inviamo un parametro con identificativo “id” che contiene il valore 3.</p>
<p>E se volessimo inviare un array? Nessun problema, ci viene in aiuto <a title="JSON" href="http://it.wikipedia.org/wiki/JSON">JSON</a>.</p>
<p><a title="ExtJS" href="http://www.extjs.com/">ExtJs</a> è chiaramente progettato per fornire pieno supporto a <a title="JSON" href="http://it.wikipedia.org/wiki/JSON">JSON</a>, dunque possiamo sfruttare questo protocollo. Codifichiamo quindi il nostro array utilizzando le funzioni che ExtJs ci mette a disposizione, come ad esempio la seguente:</p>
<p>Ext.encode(array)</p>
<p>Supponendo quindi di voler inviare un array di valori con una chiamata <a title="Ajax" href="http://it.wikipedia.org/wiki/AJAX">Ajax</a> il nostro codice potrebbe diventare:<br />
Ext.Ajax.request({<br />
[…]<br />
url: &#8216;pagina.php&#8217;,<br />
<strong> params: {data: Ext.encode(arrayData)},</strong><br />
success: function(resp) {<br />
[…]<br />
} ,<br />
failure: function(a, b) {<br />
[…]<br />
}<br />
});</p>
<p>Lato server, sarà sufficiente eseguire il decoding del parametro “data”, che giunge al server sottoforma di stringa <a title="JSON" href="http://it.wikipedia.org/wiki/JSON">JSON</a>:</p>
<p>$myArray = json_decode($_POST[‘data’]);</p>

<div class="sociallist">
<span class="sociallist_tagline">
<strong>Vota Articolo:</strong><br/><!-- SocialList.org BEGIN -->
<script type="text/javascript">
sociallist_a95e45cf_url = 'http://www.marcolecce.com/blog/2010/05/19/extjs-inviare-un-array-in-ajax/';
sociallist_a95e45cf_title = 'ExtJs, inviare un array nelle chiamate Ajax';
sociallist_a95e45cf_text = '';
sociallist_a95e45cf_tags = 'AJAX,Ext Js,Javascript,PHP';
</script><script type="text/javascript" src="http://sociallist.org/widget.js?type=1&cols=3&rows=5&button_dx=160&button_dy=24&lang=it&uid=a95e45cf"></script>
<noscript>
<a href="http://sociallist.org/submit.php?type=1&lang=it&url=http%3A%2F%2Fwww.marcolecce.com%2Fblog%2F2010%2F05%2F19%2Fextjs-inviare-un-array-in-ajax%2F&title=ExtJs%2C+inviare+un+array+nelle+chiamate+Ajax" target="_blank" title="Bookmark this Website"><img src="http://sociallist.org/buttons/it160x24.gif" border="0" width="160" height="24" alt="Bookmark" /></a>
</noscript>
<!-- SocialList.org END --></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.marcolecce.com/blog/2010/05/19/extjs-inviare-un-array-in-ajax/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ajax &#8211; le basi di questa meravigliosa tecnica</title>
		<link>http://www.marcolecce.com/blog/2008/01/21/ajax-le-basi-di-questa-meravigliosa-tecnica/</link>
		<comments>http://www.marcolecce.com/blog/2008/01/21/ajax-le-basi-di-questa-meravigliosa-tecnica/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 09:45:14 +0000</pubDate>
		<dc:creator>marco</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.marcolecce.com/blog/2008/01/21/ajax-le-basi-di-questa-meravigliosa-tecnica/</guid>
		<description><![CDATA[Ajax ( Asynchronous JavaScript and XML ) è una tecnica di sviluppo web che ha lo scopo di proporre interattivà senza tuttavia dover ricaricare la pagina ad ogni interazione con l&#8217;utente. In sostanza, Ajax permette attività in backgroud rispetto ad eventi principali: un esempio tipico di utilizzo di questa tecnica è l&#8217;aggiornamento dinamico di elenchi, [...]]]></description>
			<content:encoded><![CDATA[<p>Ajax <em>( <a href="it.wikipedia.org/wiki/AJAX" target="_blank"><font size="-1">Asynchronous JavaScript and XML</font></a> ) </em>è una tecnica di sviluppo web che ha lo scopo di proporre interattivà senza tuttavia dover ricaricare la pagina ad ogni interazione con l&#8217;utente. In sostanza, Ajax permette attività in backgroud rispetto ad eventi principali: un esempio tipico di utilizzo di questa tecnica è l&#8217;aggiornamento dinamico di elenchi, per esempio utilizzato ultimamente nei <a href="en.wikipedia.org/wiki/Social_network" target="_blank">social networks</a>. Mentre l&#8217;utente può scorrere le notizie e qundi interagire con la pagina, l&#8217;elenco delle news inserite si autoaggiorna senza tuttavia dover attedere che sia l&#8217;utente stesso ad effettuare l&#8217;aggiornamento della pagina.</p>
<p>Questa tecnica ha ormai aperto le porte a nuove tipologie di applicazioni, sempre più interattive e sempre più accattivanti. Ma come funziona Ajax? Ecco un esempio passo-passo di utilizzo di queste tecnologie: i commenti si possono leggere direttamente sul codice, in modo da facilitare la comprensione e velocizzare l&#8217;apprendimento. Supponiamo che questo codice sia contenuto in un file<br />
&#8220;<a href="http://www.marcolecce.com/blog/Esempi/esempio2/ajax.js" target="_blank">ajax1.js</a>&#8221; :</p>
<p>/*<br />
Questa è la funzione principale di creazione: si crea la variabile <em>obj</em> che conterrà il riferimento all&#8217;oggetto <em>XMLHttpRequest</em> l&#8217;oggetto principale su cui si agisce. Per garantire la compatibilità viene eseguito un controllo sul tipo di browser,  visto che  a seconda  della tipologia l&#8217;oggetto obj viene creato in modi diversi. Se il browser è &#8220;non &#8211; Internet Explorer&#8221;, allora si utilizza la funzione <em>XMLHttpRequest </em>altrimenti se il browser è Internet Explorer si utilizza <em>ActiveXObject(&#8220;Microsoft.XMLHTTP&#8221;)</em>. Questa differenza ha una base teorica, che non trattiamo in questa sede, occupandoci qui di &#8220;pura pratica&#8221;. Se volete approfondimenti scriveteci, e provvederemo  ad esaudire le vostre richieste! <img src='http://www.marcolecce.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  <em><br />
</em></p>
<p>*/<br />
<em>function createXHR() {<br />
var obj;<br />
if (window.XMLHttpRequest) {    // Non Internet Explorer<br />
obj = new XMLHttpRequest();<br />
} else if (window.ActiveXObject) { // Internet Explorer<br />
obj = new ActiveXObject(&#8220;Microsoft.XMLHTTP&#8221;);<br />
}<br />
return obj;<br />
}</em></p>
<p><em>obj=createXHR();</em></p>
<p>/*Questa è la funzione che gestisce e analizza lo stato dell&#8217;applicazione: si procede innanzittutto con dei controlli, che possiamo fare analizzando lo stato dell&#8217;oggetto obj precedentemente istanziato. Se durante il cambiamento si stato dell&#8217;oggetto obj non si sono verificati errori, allora le funzioni <em>readyState</em> e <em>status</em> ritorneranno rispettivamente i valori 4 e 200, valori che indicano appunto l&#8217;avvenuto caricamento con successo. A questo punto possiamo scrivere il codice che deve eseguire l&#8217;appilcazione per raggiungere il suo obiettivo. Nel nostro caso, una volta ricevuta la richiesta, la nostra piccola applicazione Ajax provvedrà a creare una select caricando il contenuto dinamicamente, cioè una select che cambia le opzioni in base ad una scelta fatta dall&#8217;utente ma senza il bisogno di ricaricare l&#8217;intera pagina.<br />
*/<em><br />
function onStateChange() {    // Cambiamento Stato<br />
if (obj.readyState == 4) { // Caricamento Avvenuto<br />
if (obj.status == 200) { // con successo</em></p>
<p><em>var div = document.getElementById(&#8216;risultato&#8217;);<br />
if ( document.uniqueID ) {<br />
var select = document.createElement(&#8220;&lt;select id=&#8217;district&#8217; name=&#8217;district&#8217; &gt;&lt;/select&gt;&#8221;);<br />
} else {<br />
var select = document.createElement(&#8220;select&#8221;);<br />
}<br />
select.setAttribute(&#8220;name&#8221;,&#8221;district&#8221;);<br />
select.setAttribute(&#8220;id&#8221;,&#8221;district&#8221;);<br />
select.setAttribute(&#8220;onchange&#8221;,&#8221;invia2();&#8221;);</em></p>
<p><em>list = new Array();<br />
list1 = new Array();<br />
list2 = new Array();</em></p>
<p>/*<strong>IMPORTANTE</strong>: tramite la proprietà <em>responseText </em>dell&#8217;oggetto<em> obj </em>è possibile recuperare valori prodotti dal file che si occupa di gestire la richiesta al server, per esempio il file che effettua una query e che nel nostro caso è <em>xmlHttpRequest.php</em>*/  <em><br />
string = obj.responseText;</em></p>
<p><em>list = string.split(&#8220;;&#8221;);<br />
list1 = list[0].split(&#8220;\n&#8221;);<br />
list2 = list[1].split(&#8220;\n&#8221;);</em></p>
<p><em>for ( i=0; i &lt; list1.length; i++ ) {<br />
op = new Option(list2[i], list1[i]);<br />
select.options[i] = op;<br />
}<br />
document.getElementById(&#8220;risultato&#8221;).innerHTML=&#8221;";<br />
div.appendChild(select);</em></p>
<p><em>} else {<br />
document.getElementById(&#8220;risultato&#8221;).innerHTML=&#8221;?&#8221;;<br />
alert(&#8220;Errore: &#8220;+obj.statusText);<br />
}<br />
}<br />
</em></p>
<p><em>}</em></p>
<p>/*La funzione <em>invia()</em> è quella da cui inizia l&#8217;attività: infatti questa funzione non fa altro che inviare alla funzione <em>inviaXHR()</em> il riferimento all&#8217;oggetto obj e il link del file di gestione<br />
*/<em><br />
function invia() {</em></p>
<p><em>inviaXHR(obj,&#8221;http://link_pagina/xmlHttpRequest.php&#8221;);<br />
}<br />
</em></p>
<p>/*Questo è il cuore dell&#8217;applicazione: attraverso una richiesta POST, inviamo con la funzione <em>send()</em> i dati al file <em>xmlHttpRequest.php</em>, che<em> </em>potrà svolgere il suo compito indipendentemente dalle altre interazioni che l&#8217;utente potrà avere con la pagina. Nel nostro caso, supponiamo che in questo file ci sia il codice per effettuare una query al database, e che con i risultati ottenuti si crei l&#8217;insieme delle opzioni che andranno a &#8220;riempire&#8221; la select di cui sopra. Supponiamo di aver creato una stringa in cui ogni attributo value dell&#8217;opzione è separato dal valore visibile dal carattere &#8220;|&#8221;, cioè:</p>
<p align="center"> value|Valore visibile  -&gt;&gt;&gt;  &lt;option value=&#8217;value&#8217;&gt;Valore visibile&lt;/option&gt;</p>
<p> */<em><br />
function inviaXHR(obj,url) {<br />
try {<br />
</em><em>// Preparazione comunicazione</em><br />
<em>        obj.open(&#8220;POST&#8221;, url, true);</em></p>
<p><em>        // caricamento in corso&#8230;fornisce il feedback all&#8217;utente</em><br />
<em>        document.getElementById(&#8220;risultato&#8221;).innerHTML=&#8221;caricamento in corso&#8230;&#8221;;<br />
obj.setRequestHeader(&#8216;Content-Type&#8217;, &#8216;application/x-www-form-urlencoded&#8217;);</em></p>
<p><em>//richiamiamo la funzione </em><em>onStateChange analizzata precedentemente<br />
</em><em>       obj.onreadystatechange = onStateChange;</em></p>
<p><em>/*<strong>IMPORTANTE</strong>: a seconda del valore country possiamo gestire la select<br />
che vogliamo creare, e quindi possiamo aggiornarla in base a determinati valori che vengono assegnati a country<br />
*/<br />
country=escape(document.myform.country.value);</em></p>
<p><em>//Inviamo al file di gestione .php alcuni parametri, attraverso il metodo POST<br />
obj.send(&#8220;country=&#8221;+country);    // Trasferimento</em></p>
<p><em>} catch (e) {</em></p>
<p><em>/*<br />
</em>Se si verificano problemi, l&#8217;elemento HTML che doveva diventare una select verrà sostituiro con un ?, che indica appunto il verificarsi di errori o problemi<em><br />
*/<br />
document.getElementById(&#8220;risultato&#8221;).innerHTML=&#8221;?&#8221;;<br />
alert(&#8220;Errore: &#8220;+e);<br />
}</em></p>
<p><em>}</em></p>
<p>Per chi avesse le idee ancora confuse, <strong>riassumiamo</strong> brevemente ciò che succede.</p>
<ol>
<li>Creaimo l&#8217;oggetto obj.</li>
<li>Supponiamo di cliccare su un pulsante che richiama la funzione javascript &#8220;invia()&#8221;; attiviamo così una richiesta al server.</li>
<li>Tramite la funzione <em>inviaXHR </em>gestiamo effettivamente la richiesta:  il metodo utiliaazto è il POST (con cui possiamo inviare dati al file di gestione) e il file di gestione è <em>xmlHttpRequest.php</em>, che nel nostro caso è scritto in PHP ma che potrebbe essere scritto in un qualsiasi linguaggio di programmazione. La funzione <em>send()</em> ci permette di inviare parametri al file di gestione, parametri che vengono inviati attraverso il metodo POST, appunto.</li>
<li>Il file di gestione può fare qualsiasi cosa per svolgere il suo compito: supponiamo nel nostro caso che il file effettui una query al database e restituisca una stringa.</li>
<li>Viene richiamata la gestione di stato dell&#8217;oggetto, <em>onStateChange</em>, che analizza l&#8217;andamento della richiesta che abbiamo effettuato. Se tutto è andato bene, recuperiamo attraverso la proprietà <em>responseText</em> dell&#8217;oggetto obj la stringa prodotta dal file di gestione. Possiamo lavorare sulla stringa restituita, creando ad esempio una select con delle option che dipendono dal valore di un parametro scelto dall&#8217;utente, nel nostro caso <em>country</em>.</li>
</ol>
<p>Tutto questo lavoro viene svolto in background, senza che l&#8217;utente di accorga di nulla, ma soprattutto permettendo all&#8217;utente di continuare ad interagire con la pagina liberamente e come se nulla stia accadendo.</p>

<div class="sociallist">
<span class="sociallist_tagline">
<strong>Vota Articolo:</strong><br/><!-- SocialList.org BEGIN -->
<script type="text/javascript">
sociallist_8378d76c_url = 'http://www.marcolecce.com/blog/2008/01/21/ajax-le-basi-di-questa-meravigliosa-tecnica/';
sociallist_8378d76c_title = 'Ajax - le basi di questa meravigliosa tecnica';
sociallist_8378d76c_text = '';
sociallist_8378d76c_tags = '';
</script><script type="text/javascript" src="http://sociallist.org/widget.js?type=1&cols=3&rows=5&button_dx=160&button_dy=24&lang=it&uid=8378d76c"></script>
<noscript>
<a href="http://sociallist.org/submit.php?type=1&lang=it&url=http%3A%2F%2Fwww.marcolecce.com%2Fblog%2F2008%2F01%2F21%2Fajax-le-basi-di-questa-meravigliosa-tecnica%2F&title=Ajax+-+le+basi+di+questa+meravigliosa+tecnica" target="_blank" title="Bookmark this Website"><img src="http://sociallist.org/buttons/it160x24.gif" border="0" width="160" height="24" alt="Bookmark" /></a>
</noscript>
<!-- SocialList.org END --></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.marcolecce.com/blog/2008/01/21/ajax-le-basi-di-questa-meravigliosa-tecnica/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
