<?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>A fronteira final &#187; AJAX</title>
	<atom:link href="http://afronteirafinal.com/tag/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://afronteirafinal.com</link>
	<description>Audaciosamente indo onde nenhum dev jamais esteve</description>
	<lastBuildDate>Thu, 15 Dec 2011 15:52:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>JSONP e o &#8220;Ajax Crossdomain&#8221;</title>
		<link>http://afronteirafinal.com/jsonp-e-o-ajax-crossdomain/</link>
		<comments>http://afronteirafinal.com/jsonp-e-o-ajax-crossdomain/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 02:02:10 +0000</pubDate>
		<dc:creator>Alexander Borges</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[JSONP]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=300</guid>
		<description><![CDATA[Os serviços para intercâmbio de dados entre aplicações via protocolo http alcançaram algum nível de maturidade nesses últimos anos. Hoje, já sabemos como disponibilizar serviços via web, já existem abordagens que funcionam, outras vão sendo experimentadas. O fato é que existem diversas APIs disponíveis na web para atender as mais variadas necessidades: Agenda, mapas, autenticação [...]]]></description>
			<content:encoded><![CDATA[<p>Os serviços para intercâmbio de dados entre aplicações via <a title="Http Protocol" href="http://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol">protocolo http</a> alcançaram algum nível de maturidade nesses últimos anos. Hoje, já sabemos como disponibilizar serviços via web, já existem abordagens que funcionam, outras vão sendo experimentadas. O fato é que existem diversas APIs disponíveis na web para atender as mais variadas necessidades: Agenda, mapas, autenticação de usuários, integração com redes sociais, enfim. Serviços públicos, serviços pagos, serviços com mais de um plano de licensiamento para atender mais de um tipo de consumidor. Hoje qualquer um pode criar sua api e colocar na web e ganhar (se quiser) seu dinheirinho com aquilo.</p>
<p>Em meio às tecnologias para troca de dados e comunicação entre aplicações pela web como REST, SOAP, WSDL etc, se destacam também as APIs que fornecem dados com simples requisições http diretamente do site via browser, sem a necessidade de processamento do lado do servidor pelo cliente do serviço. Para esses casos temos o JSONP como uma alternativa &#8220;bem em conta&#8221; para resolver problemas conhecidos. O objetivo desse post é dar uma introdução do que é e como usar o JSONP.</p>
<p><span id="more-300"></span></p>
<h2>AJAX vs JSONP</h2>
<p>Tecnicamente, JSONP não é AJAX, vamos a uma explicação bem breve da diferença:</p>
<p>AJAX se trata de requisições assíncronas por meio dos objetos XMLHttpRequest e XMLHttpResponse, que trafegam dados no formato XML ou texto puro. Esses dados são manipulados pelo programa javascript, que finalmente monta seus trechos de html sem a necessidade do recarregamento da página.</p>
<p>Já o JSONP requisita dados de forma assíncrona, assim como o AJAX, porém não utiliza os objetos XMLHttp e  só trabalha com objetos no formato JSON.</p>
<h2>JSON &#8211; JavaScript Object Notation</h2>
<p>Formato de dados que vem sendo fortemente utilizado para transporte de dados entre aplicações, principalmente web. Está ganhando seu espaço devido a sua simplicidade de implementação e leveza. É um subconjunto das notações de objetos javascript. Além disso, a manipulação dos dados em um objeto JSON requer um  parse simples (usando o método eval do javascript) e não se faz necessária a navegação por DOM entre os nós e atributos de um XML, e por isso a preferência pelo JSON ao invés de XML para ajax na web.</p>
<h2>Same Origin Policy</h2>
<p>Existe uma limitação para o uso do Objeto XMLHTTPRequest no que se trata de requisições entre diferentes sites. Existe um padrão de segurança, implementado por linguagens de programação, nesse caso o javascript, chamado <a title="Same Origin Policy" href="http://en.wikipedia.org/wiki/Same_origin_policy" target="_blank">Same Origin Policy</a>, ou Política de Mesma Origem. Essa recomendação de segurança impede que um documento leia ou envie informações para outra origem.</p>
<p>São considerados de origens diferentes quaisquer documentos que estejam em domínios diferentes, portas diferentes ou que utilizem protocolos de comunicação diferentes entre si.</p>
<p>Considerando a url: &#8220;http://www.afronteirafinal.com/&#8221;, podemos ter requisições que irão ter sucesso ou falhar nas seguintes situações:</p>
<div style="width:80%;background-color:#eee;padding:15px 15px">
<p><strong style="width:100%;background-color:#aaa;display:block;text-indent:20px;"> http://www.afronteirafinal.com/diretorio/pagina.html</strong><br />
<span style="color: #339966;">Funciona</span>, pois é uma requisição para o mesmo host usando o mesmo protocolo e pela mesma padrão, ou seja, dentro do mesmo site.</p>
<p><strong style="width:100%;background-color:#aaa;display:block;text-indent:20px;">https://www.afronteirafinal.com/pagina.html</strong><br />
<span style="color: #ff0000;">Não funciona</span>, pois protocolos diferentes representam origens diferentes (&#8220;http&#8221;,&#8221;https&#8221;);</p>
<p><strong style="width:100%;background-color:#aaa;display:block;text-indent:20px;">http://www.afronteirafinal.com:81/pagina.html</strong><br />
<span style="color: #ff0000;">Não funciona</span>, pois portas diferentes também representam origens diferentes (&#8220;porta 81&#8243;);</p>
<p><strong style="width:100%;background-color:#aaa;display:block;text-indent:20px;">http://www.outrosite.com/pagina.html</strong><br />
Também <span style="color: #ff0000;">não funciona</span>, pois se tratam de hosts diferentes;
</div>
<p></p>
<h2>JSONP – JSON with Padding</h2>
<p>JSONP é entendido como um “pseudo-protocolo” que permite realizar requisições http e trafegar dados no formato JSON entre documentos de origens diferentes.</p>
<h3>Como funciona:</h3>
<p>A implementação do JSONP e bastante simples, porém é necessário que o serviço responsável pela entrega os dados forneca a opção de entrega na estrutura necessária para que os dados possam ser manipulados.</p>
<p>Não existem restrições para o carregamento de imagens e scripts de outras origem, por meio do atributo “src” das tags. A técnica por tras do JSONP se aproveita dessa possibilidade para carregar scripts externos conforme a necessidade, manipulando o DOM da página.</p>
<p>O que faz acontecer o JSONP é a inclusão de uma TAG “script” no header “&lt;head&gt;” da página. Essa tag “script” recebe um atributo “src” apontando para o site externo, que responde objetos no formato JSON , esse resultado é “parseado” e fica disponível para manipulação via JavaScript.</p>
<h3>O que é o “padding”?</h3>
<p>Padding ou prefix é o nome passado na requisição ao serviço, para que na resposta o método envolva os dados em formato JSON após a resposta. Quando a requisição é feita dessa forma:</p>
<pre class="brush: html">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://domain1.com/getjson?jsonp=parseResponse&quot; target=&quot;_blank&quot;&gt;&lt;/script&gt;
</pre>
<p>A palavra “parseResponse” será a o nome da função que envolverá o json, como um callback. O resultado será algo parecido com isso:</p>
<pre class="brush: javascript">
parseResponse({“name”:”Jujuzinho”, ”idade”:10, brinquedos:[“bola”,”pipa”,”ioiô”]})
</pre>
<p>Você, como um esperto desevolvedor, já terá declarado esse método (parseResponse) em seu programa, e este saberá como sabiamente utilizar os dados recebidos.</p>
<h2>Suporte nos frameworks</h2>
<p>Os frameworks JavaScript geralmente dão um bom suporte às implementações do JSONP, resolvendo a maioria das questões que teríamos que nos preocupar fazendo tudo “na unha”.</p>
<p>No caso do jQuery, ele abstrai as particularidades entre jsonp e ajax e incorpora o JSONP com mais um formato de dados para o seu objeto Ajax.</p>
<p>Em caso de dúvidas, primeiro procure a documentação do framework porque certamente ele trará informações  de como implementar jsonp sem mais traumas.</p>
<h2>No próximo episódio&#8230;</h2>
<p>No próximo post sobre o assunto falaremos sobre o futuro. Como será feito o transporte de dados pela web. Protocolos de comunicação de verdade para rodar no browser. Que projetos já estão em andamento e como eles poderão resolver problemas que travam o avanço da comunicação entre apps web.</p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/jsonp-e-o-ajax-crossdomain/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

