<?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/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Ahã... programando...!</title>
	<atom:link href="http://ahaprogramando.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ahaprogramando.wordpress.com</link>
	<description>Programação Web com maionese e catchup</description>
	<lastBuildDate>Mon, 27 Apr 2009 23:14:16 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='ahaprogramando.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/3fb123434dfb68fcf1fe56b8c45b4c27?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Ahã... programando...!</title>
		<link>http://ahaprogramando.wordpress.com</link>
	</image>
			<item>
		<title>Ajax – Enviar Conteúdo de Formulário via POST com DOJO</title>
		<link>http://ahaprogramando.wordpress.com/2009/04/27/ajax-enviar-conteudo-de-formulario-via-post-com-dojo/</link>
		<comments>http://ahaprogramando.wordpress.com/2009/04/27/ajax-enviar-conteudo-de-formulario-via-post-com-dojo/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 15:30:57 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[DOJO]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[assíncrono]]></category>
		<category><![CDATA[biblioteca Javascript]]></category>
		<category><![CDATA[DOJO toolkit]]></category>
		<category><![CDATA[innerHTML]]></category>
		<category><![CDATA[WIDGET DOJO]]></category>
		<category><![CDATA[WIDGETS DOJO]]></category>
		<category><![CDATA[xhrPost]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=75</guid>
		<description><![CDATA[

Ajax (aquela maneira genial de atualizar conteúdo em uma página) tem sido a sensação nos últimos anos de desenvolvimento WEB. Lembro das minhas primeiras investidas na área em 2005, naquela época ainda um terreno desconhecido (pra mim) e bastante pedregoso. Anos mais tarde temos diversas ferramentas prontas e gratuitas para desenvolver tarefas em Ajax.
Mas nem [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=75&subd=ahaprogramando&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="western" style="margin-bottom:0;" align="center">
<p class="western" style="margin-bottom:0;" align="center">
<p class="western" style="margin-bottom:0;" align="justify">Ajax (aquela maneira genial de atualizar conteúdo em uma página) tem sido a sensação nos últimos anos de desenvolvimento WEB. Lembro das minhas primeiras investidas na área em 2005, naquela época ainda um terreno desconhecido (pra mim) e bastante pedregoso. Anos mais tarde temos diversas ferramentas prontas e gratuitas para desenvolver tarefas em Ajax.<br />
Mas nem só para atualizar conteúdo na página serve o famigerado recurso, pois Ajax é como um portal na quarta dimensão que pode ser aberto no browser e que permite tráfego de dados nas duas direções [servidor &gt; cliente] e [cliente &gt; servidor]. No presente artigo vamos tratar do último caso: “como enviar dados de um formulário para o servidor sem recarregar a página toda após o envio?”</p>
<p class="western" style="margin-bottom:0;" align="justify">Nas minhas primeiras empreitadas nesta área vi que o terreno era árduo e acabei desistindo, mas a biblioteca dojo oferece uma solução com estilo.</p>
<p class="western" style="margin-bottom:0;" align="justify">Se vc ainda não conhece a biblioteca Javascript Dojo, recomendo uma olhada no artigo “Como funciona a biblioteca Javascript Dojo”, será de grande valia <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p class="western" style="margin-bottom:0;" align="justify">
<h2 class="western" style="margin-bottom:0;"><strong>Um pouco de Teoria</strong></h2>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify">Vejamos o que ocorre em uma situação de envio tradicional. Na figura 1, podemos identificar 2 arquivos principais, o da página index, ao qual foi incluso um formulário, e o arquivo que recebe os dados. Nestas circunstâncias o envio dos dados é definido simplesmente pelo atributo “action” da tag &lt;form&gt; e o método de envio (geralmente ”post”) é definido no atributo “method” da mesma tag. A tarefa é acionada quando o usuário clicar no botão definido pela tag &lt;submit&gt;.</p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify"><span style="color:#0000ff;">No protocolo HTTP, o browser envia alguma informação ao servidor, e este precisa retornar uma resposta ao browser.</span></p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify">
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify">No momento do envio, a página toda sai de cena, e o browser envia uma requisição via HTTP ao servidor, para que o arquivo recebe_dados.php entre em ação.</p>
<p class="western" style="margin-bottom:0;" align="justify">
<div id="attachment_77" class="wp-caption alignnone" style="width: 409px"><img class="size-full wp-image-77" title="Envio de dados via post pelo método tradicional." src="http://ahaprogramando.files.wordpress.com/2009/04/metodo_com_post_http2.png?w=399&#038;h=205" alt="Figura 1 - Envio de dados via post pelo método tradicional" width="399" height="205" /><p class="wp-caption-text">Figura 1 - Envio de dados via post pelo método tradicional</p></div>
<p class="western" style="margin-bottom:0;" align="justify">Este arquivo efetua as tarefas subseqüentes como gravar as informações no Banco de Dados, e após envia um cabeçalho (header) ao browser, com uma diretiva para que o browser peça ao servidor novamente o carregamento de index.php. A URL desta diretiva pode conter uma variável com a resposta dizendo “Ok tudo ocorreu bem!”, ou “Heitaaa, deu problema!”.</p>
<p class="western" style="margin-bottom:0;" align="justify">
<p class="western" style="margin-bottom:0;" align="justify">Ex do código:</p>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#000000;"><span style="font-family:Verdana,sans-serif;"><span style="font-size:x-small;">&lt;?<br />
//tarefas</span></span></span><span style="color:#000000;"><br />
…<span style="font-family:Verdana,sans-serif;"><span style="font-size:x-small;"><br />
//retorno<br />
header(“<span style="color:#c5000b;">location:index.php?resposta=</span>”.<span style="color:#008000;">$resposta</span>);<br />
?&gt;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="justify">Bom, este é o cenário tradicional que todo WEB designer com experiência de formulários conhece.</p>
<p class="western" style="margin-bottom:0;" align="justify">A proposta deste post (aqui post significa artigo do blog hahaha), como dito anteriormente, é utilizar Ajax para que a página não saia de cena enquanto os dados são enviados para recebe_dados.php.</p>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#0000ff;">Tenha em mente que Ajax é um método de transferência de dados todo manipulado via Javascript. </span></p>
<p class="western" style="margin-bottom:0;" align="justify">A <strong>figura 2</strong> ilustra o esquema que vamos utilizar com a API do Dojo, o xhrPost.</p>
<p class="western" style="margin-bottom:0;" align="justify">
<p class="western" style="margin-bottom:0;" align="justify">
<p class="western" style="margin-bottom:0;" align="justify">
<div id="attachment_78" class="wp-caption alignnone" style="width: 410px"><img class="size-full wp-image-78" title="Envio de dados com com dojo xhrPost, uma prática maneira de efetuar o envio via Ajax." src="http://ahaprogramando.files.wordpress.com/2009/04/metodo_com_xhrpost1.png?w=400&#038;h=472" alt="Figura 2 - Envio de dados com dojo xhrPost" width="400" height="472" /><p class="wp-caption-text">Figura 2 - Envio de dados com dojo xhrPost</p></div>
<p class="western" style="margin-bottom:0;" align="justify">Nesta figura procurei deixar claro que os dados contidos no Formulário agora pegam outro trajeto. Veja que agora, o xhrPost, dentro da própria página index.php é quem captura os dados contidos no formulário, e os envia para recebe_dados.php. Ele é uma espécie de agente atravessador que negocia a transferência dos dados, digamos&#8230; por debaixo dos panos, e ninguém vê que algo está indo para o servidor, pois index.php não sai de cena.</p>
<p class="western" style="margin-bottom:0;" align="justify">Assim, se faz necessário também uma modificação na forma do envio da resposta que recebe_dados.php deseja devolver a index.php. Veja que quem está em contado com o servidor neste momento não é o browser todo, mas apenas o objeto xhrPost, ele mesmo fica aguardando a resposta, a qual pode ser um outro HTML, ou um TEXTO qualquer. Mas não desejamos um simples texto, porém uma variável contendo um texto de resposta. Quando vc quer codificar variáveis com valores em um meio textual, geralmente se utiliza XML, JSON, CSV ou coisa parecida. Neste caso, o dojo oferece uma ferramenta simples para codificar as variáveis em JSON.</p>
<p class="western" style="margin-bottom:0;" align="justify">Quando o xhrPost recebe a resposta, ele a pode entregar para funções Javascript específicas que vão decodificar o resultado em JSON e por fim apresentar a mensagem na tela do usuário.</p>
<p class="western" style="margin-bottom:0;" align="justify">Enfim este é o efeito que desejamos. Vamos ás instruções?</p>
<p class="western" style="margin-bottom:0;" align="justify">
<h2 class="western" style="margin-bottom:0;font-weight:normal;">Material necessário:</h2>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify"><strong>Básico:</strong></p>
<ol>
<li>Arquivo 			HTML  com formulário básico ( index.php )</li>
<li>Arquivo 			para receber os dados e devolver uma resposta (recebe_dados.php)</li>
<li>Biblioteca 			Javascript Dojo (veja como instalar aqui mesmo no Ahã&#8230; Programando&#8230;:  <a title="Instalação da Biblioteca Dojo" href="http://ahaprogramando.wordpress.com/2009/04/26/instalacao-da-biblioteca-dojo/" target="_blank">instalacao-da-biblioteca-dojo</a>)</li>
</ol>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify"><span style="color:#000000;"><span style="font-family:Verdana,sans-serif;"><span style="font-size:x-small;"> </span></span></span></p>
<p class="western" style="margin-bottom:0;" align="justify"><strong>Ferramentas pertencentes ao dojo:</strong></p>
<ol>
<li>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#0000ff;">dijit.dijit</span> (layouts dojo)</p>
</li>
<li>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#0000ff;">dijit.form.Button</span> (widget button)</p>
</li>
<li>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#0000ff;">dojo.parser </span>(farejador que procura widgets no meio do 	HTML para ativar)</p>
</li>
<li>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#0000ff;">xhrPost </span>(Api 	dojo para envio de dados via Ajax pelo método Post)</p>
</li>
<li>
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#0000ff;">tundra.css</span> (folha 	padrão da biblioteca dojo)</p>
</li>
<li>
<p class="western" style="margin-bottom:0;" align="justify">classe 	de conversão Json PHP (já 	vem de brinde com o Dojo)</p>
</li>
<li>
<p class="western" style="margin-bottom:0;" align="justify">alguns 	scripts adicionais pra organizar as coisas</p>
</li>
</ol>
<p class="western" style="margin-bottom:0;" align="justify">
<p class="western" style="margin-bottom:0;" align="justify">
<p class="western" style="margin-bottom:0;" align="justify"><span style="color:#000000;"><span style="font-family:Verdana,sans-serif;"><span style="font-size:small;"><strong>Mãos á obra:</strong></span></span></span></p>
<p class="western" style="margin-bottom:0;" align="justify">Nosso maior trabalho será com o arquivo index.php no qual precisamos adicionar as devidas funcionalidades do dojo.</p>
<p class="western" style="margin-bottom:0;" align="justify">Abaixo o código de index.php, desculpem a endentação que não é das melhores, por que foi adequada à largura disponível de área para textos do blog.</p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#000000;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#0000ff;">&lt;?</span><span style="color:#a31515;">php<br />
</span></span></span></span><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//charset<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#000000;">header</span><span style="color:#000099;">(</span><span style="color:#cc0000;">&#8220;Content-Type: text/html; charset=ISO-8859-1&#8243;</span><span style="color:#0000ff;">,</span><span style="color:#006600;">true</span><span style="color:#000099;">)</span><span style="color:#000000;">;</span> </span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//modifique aqui o caminho da url do dojo<br />
//em seu servidor<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#464600;"><strong>$DOJO_URL</strong></span><span style="color:#0000ff;">=</span><span style="color:#cc0000;">&#8220;http://localhost/dojo-release-1.3.0-src/&#8221;</span><span style="color:#000000;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#0000ff;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">?&gt;</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#0000ff;"><br />
&lt;</span><span style="color:#a31515;">html</span> <span style="color:#ff0000;">xmlns</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;http://www.w3.org/1999/xhtml&#8221;&gt;<br />
&lt;</span><span style="color:#a31515;">head</span><span style="color:#0000ff;">&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">title</span><span style="color:#0000ff;">&gt;</span><span style="color:#000000;">TESTE xhrPost</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">title</span><span style="color:#0000ff;">&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">link<br />
</span><span style="color:#ffffff;">__</span><span style="color:#ff0000;">id</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;themeStyles&#8221;<br />
</span><span style="color:#ffffff;">__</span><span style="color:#ff0000;">rel</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;stylesheet&#8221;<br />
</span><span style="color:#ffffff;">__</span><span style="color:#ff0000;">href</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;&lt;?=$DOJO_URL;?&gt;dijit/themes/tundra/tundra.css&#8221;&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">script</span> <span style="color:#ff0000;">type</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;text/javascript&#8221;<br />
</span><span style="color:#ffffff;">_________</span><span style="color:#ff0000;">src</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;&lt;?=$DOJO_URL; ?&gt;dojo/dojo.js&#8221;<br />
</span><span style="color:#ffffff;">_________</span><span style="color:#ff0000;">djConfig</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;isDebug:false, parseOnLoad: true&#8221;<br />
</span><span style="color:#ffffff;">_________</span><span style="color:#ff0000;">charset</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;utf-8&#8243;&gt;&lt;/</span><span style="color:#a31515;">script</span><span style="color:#0000ff;">&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">script</span> <span style="color:#ff0000;">type</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;text/javascript&#8221;</span> <span style="color:#ff0000;">charset</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;utf-8&#8243;&gt;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#008000;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span>//carrega layer  dijit para interfaces<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span><span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">require</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;dijit.dijit&#8221;</span><span style="color:#5c5c5c;">);</span> </span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span><span style="color:#008000;">//botao do dojo p engatilhar o xhrPost<br />
</span><span style="color:#ffffff;">__</span><span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">require</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;dijit.form.Button&#8221;</span><span style="color:#5c5c5c;">);</span><span style="color:#008000;"> </span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span><span style="color:#008000;">//varre o HTML em busca de widgets dojo</span><span style="color:#ffffff;">__<br />
__</span><span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">require</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;dojo.parser&#8221;</span><span style="color:#5c5c5c;">);</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"> </span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span><span style="color:#008000;">//função [sendForm] para estabelecer o envio<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//dos dados via xhrPost. Esta função é executada<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//uma única vez quando a página é carregada, para<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//que seja estabelecida a comunicação entre o<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//FORM e o xhrPost, bem como colocar o gatilho<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//do xhrPost no botão “</span><span style="color:#005c00;">botao_submit_dojo</span><span style="color:#008000;">” que é um<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//widget Dojo. Não funfa com botões tradicionais.</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;"><strong>__</strong></span><span style="color:#0000c0;"><strong>function</strong></span> <span style="color:#000000;">sendForm</span><span style="color:#5c5c5c;">()</span> <span style="color:#5c5c5c;">{<br />
</span><span style="color:#ffffff;"><strong>___</strong></span><span style="color:#0000c0;"><strong>var</strong></span> <span style="color:#000000;">button</span> <span style="color:#5c5c5c;">=</span> <span style="color:#000000;">dijit</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">byId</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;botao_submit_dojo&#8221;</span><span style="color:#5c5c5c;">);<br />
</span><span style="color:#ffffff;">___</span><span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">connect</span><span style="color:#5c5c5c;">(<br />
</span><span style="color:#ffffff;">____</span><span style="color:#000000;">button</span><span style="color:#5c5c5c;">,<br />
</span><span style="color:#ffffff;">____</span><span style="color:#005c00;">&#8220;onClick&#8221;</span><span style="color:#5c5c5c;">,<br />
</span><span style="color:#ffffff;"><strong>____</strong></span><span style="color:#0000c0;"><strong>function</strong></span><span style="color:#5c5c5c;">(</span><span style="color:#000000;">event</span><span style="color:#5c5c5c;">){<br />
</span><span style="color:#ffffff;">_____</span><span style="color:#008000;">//para (stop) o evento submit original<br />
</span><span style="color:#ffffff;">_____</span><span style="color:#000000;">event</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">preventDefault</span><span style="color:#5c5c5c;">();<br />
</span><span style="color:#ffffff;">_____</span><span style="color:#000000;">event</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">stopPropagation</span><span style="color:#5c5c5c;">();<br />
</span><span style="color:#ffffff;"><strong>_____</strong></span><span style="color:#0000c0;"><strong>var</strong></span> <span style="color:#000000;">deferred</span> <span style="color:#5c5c5c;">=</span> <span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">xhrPost</span><span style="color:#5c5c5c;">({<br />
</span></span></span><span style="color:#008000;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">______</span>//”form_teste” – id do formulário HTML<br />
<span style="color:#ffffff;">______</span>//por este id o dojo localiza o FORM<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">______</span><span style="color:#000000;">form</span><span style="color:#5c5c5c;">:</span> <span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">byId</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;form_teste&#8221;</span><span style="color:#5c5c5c;">),<br />
</span><span style="color:#ffffff;">______</span><span style="color:#000000;">handleAs</span><span style="color:#5c5c5c;">:</span> <span style="color:#005c00;">&#8220;text&#8221;</span><span style="color:#5c5c5c;">,<br />
</span><span style="color:#ffffff;">______</span><span style="color:#000000;">load</span><span style="color:#5c5c5c;">:</span><span style="color:#000000;">resJsonOk</span><span style="color:#5c5c5c;">,<br />
</span><span style="color:#ffffff;">______</span><span style="color:#000000;">error</span><span style="color:#5c5c5c;">:</span><span style="color:#000000;">resJsonError<br />
</span><span style="color:#ffffff;">_____</span><span style="color:#5c5c5c;">});</span><span style="color:#008000;">//xhrPost<br />
</span><span style="color:#ffffff;">____</span><span style="color:#5c5c5c;">});</span><span style="color:#008000;">//function(event)<br />
</span><span style="color:#ffffff;">__</span><span style="color:#5c5c5c;">}</span><span style="color:#008000;">//function sendForm()</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"> </span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#008000;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span>//mensagem erro de comunicação com o servidor<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;"><strong>__</strong></span><span style="color:#0000c0;"><strong>function</strong></span><span style="color:#5c5c5c;"> </span><span style="color:#000000;">resJsonError</span><span style="color:#5c5c5c;">(</span><span style="color:#000000;">data</span><span style="color:#5c5c5c;">,</span><span style="color:#000000;">ioArgs</span><span style="color:#5c5c5c;">){<br />
</span><span style="color:#ffffff;"><strong>___</strong></span><span style="color:#0000c0;"><strong>var</strong></span> <span style="color:#000000;">msg</span> <span style="color:#5c5c5c;">=</span> <span style="color:#005c00;">&#8216;Nenhuma resposta do servidor.&#8217;</span><span style="color:#5c5c5c;">;<br />
</span><span style="color:#ffffff;"><strong>___</strong></span><span style="color:#0000c0;"><strong>if</strong></span><span style="color:#5c5c5c;">(</span><span style="color:#000000;">data</span><span style="color:#5c5c5c;">)<br />
</span><span style="color:#ffffff;">____</span><span style="color:#000000;">msg</span> <span style="color:#5c5c5c;">+=</span> <span style="color:#005c00;">&#8216;Ocorreram os seguintes erros em &#8216;</span><span style="color:#5c5c5c;">;<br />
</span><span style="color:#ffffff;">____</span><span style="color:#000000;">msg</span> <span style="color:#5c5c5c;">+=</span> <span style="color:#005c00;">&#8216;&lt;b&gt;recebe_dados.php:&lt;/b&gt;&lt;br&gt; &#8216;</span> <span style="color:#5c5c5c;">+</span> <span style="color:#000000;">data</span><span style="color:#5c5c5c;">;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">byId</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;ct_msgs&#8221;</span><span style="color:#5c5c5c;">).</span><span style="color:#000000;">innerHTML</span> <span style="color:#5c5c5c;">=</span> <span style="color:#000000;">msg</span><span style="color:#5c5c5c;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span><span style="color:#5c5c5c;">}</span><span style="color:#008000;">//function resJsonError(&#8230;)<br />
</span></span></span><span style="color:#008000;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span>//recepção da MSG de retorno OK, recebe o conteúdo<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">__</span><span style="color:#008000;">//JSON devolvido do recebe_dados.php, e extrai as<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">//variáveis (status e msg) com seus respectivos valores</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;"><strong>__</strong></span><span style="color:#0000c0;"><strong>function</strong></span><span style="color:#5c5c5c;"> </span><span style="color:#000000;">resJsonOk</span><span style="color:#5c5c5c;">(</span><span style="color:#000000;">data</span><span style="color:#5c5c5c;">,</span><span style="color:#000000;">ioArgs</span><span style="color:#5c5c5c;">) {<br />
</span><span style="color:#ffffff;"><strong>___</strong></span><span style="color:#0000c0;"><strong>if</strong></span><span style="color:#5c5c5c;">(</span><span style="color:#000000;">data</span><span style="color:#5c5c5c;">){<br />
</span><span style="color:#ffffff;"><strong>____</strong></span><span style="color:#0000c0;"><strong>var</strong></span> <span style="color:#000000;">d</span> <span style="color:#5c5c5c;">=</span> <span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">fromJson</span><span style="color:#5c5c5c;">(</span><span style="color:#000000;">data</span><span style="color:#5c5c5c;">),<br />
</span><span style="color:#ffffff;">____</span><span style="color:#000000;">conteudo_msg</span> <span style="color:#5c5c5c;">=</span> <span style="color:#005c00;">&#8220;STATUS: ["</span><span style="color:#5c5c5c;">+</span><span style="color:#000000;">d</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">status</span><span style="color:#5c5c5c;">+</span><span style="color:#005c00;">"] &lt;br&gt;&#8221;</span><span style="color:#5c5c5c;">;<br />
</span><span style="color:#ffffff;">____</span><span style="color:#000000;">conteudo_msg</span> <span style="color:#5c5c5c;">+=</span> <span style="color:#000000;">d</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">msg</span> <span style="color:#5c5c5c;">+</span> <span style="color:#005c00;">&#8220;&lt;br&gt;&#8221;</span><span style="color:#5c5c5c;">;<br />
</span><span style="color:#ffffff;">____</span><span style="color:#000000;">dojo</span><span style="color:#5c5c5c;">.</span><span style="color:#000000;">byId</span><span style="color:#5c5c5c;">(</span><span style="color:#005c00;">&#8220;ct_msgs&#8221;</span><span style="color:#5c5c5c;">).</span><span style="color:#000000;">innerHTML</span> <span style="color:#5c5c5c;">=</span> <span style="color:#000000;">conteudo_msg</span><span style="color:#5c5c5c;">;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#5c5c5c;">}</span><span style="color:#008000;">//if<br />
</span><span style="color:#ffffff;">__</span><span style="color:#5c5c5c;">}</span><span style="color:#008000;">//function resJsonOk(&#8230;)</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#ffffff;">__</span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#008000;">//executa sendForm quando a página for carregada<br />
</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#ffffff;">___</span><span style="color:#000000;">dojo.addOnLoad(sendForm);<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">script</span><span style="color:#0000ff;">&gt;<br />
&lt;/</span><span style="color:#a31515;">head</span><span style="color:#0000ff;">&gt;<br />
&lt;</span><span style="color:#a31515;">body</span> <span style="color:#ff0000;">class</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;tundra&#8221;&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">div</span> <span style="color:#ff0000;">id</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;ct_msgs&#8221;&gt;&lt;/</span><span style="color:#a31515;">div</span><span style="color:#0000ff;">&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">div</span> <span style="color:#ff0000;">id</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;ct_geral&#8221;&gt;<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">&lt;!&#8211;Abaixo um formulário simplório com&#8230; &#8211;&gt;<br />
</span><span style="color:#ffffff;">__</span><span style="color:#008000;">&lt;!&#8211;as configurações tradicionais &#8211;&gt;<br />
</span><span style="color:#ffffff;">__</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">form</span> <span style="color:#ff0000;">id</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;form_teste&#8221;</span> <span style="color:#ff0000;">method</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;post&#8221;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#ff0000;">action</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;recebe_dados.php&#8221;&gt;<br />
</span><span style="color:#ffffff;">__ </span><span style="color:#008000;">&lt;!&#8211;Tags de entrada de dados&#8230; &#8211;&gt;<br />
</span><span style="color:#ffffff;">__ </span><span style="color:#008000;">&lt;!&#8211;também tradicionais &#8211;&gt;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">label</span><span style="color:#0000ff;">&gt;</span><span style="color:#000000;">Nome:</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">label</span><span style="color:#0000ff;">&gt;</span><span style="color:#000000;">&amp;nbsp;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">input</span><span style="color:#ffffff;"> </span><span style="color:#ff0000;">type</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;text&#8221;</span> <span style="color:#ff0000;">name</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;txt_nome&#8221;</span> <span style="color:#0000ff;">/&gt;</span><span style="color:#000000;">&amp;nbsp;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">label</span><span style="color:#0000ff;">&gt;</span><span style="color:#000000;">Endere&amp;ccedil;o:</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">label</span><span style="color:#0000ff;">&gt;</span><span style="color:#000000;">&amp;nbsp;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">input</span> <span style="color:#ff0000;">type</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;text&#8221;</span> <span style="color:#ff0000;">name</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;txt_endereco&#8221;</span> <span style="color:#0000ff;">/&gt;</span><span style="color:#000000;">&amp;nbsp;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#008000;">&lt;!&#8211;botão especial, que é um WIDGET dojo &#8211;&gt;<br />
</span><span style="color:#ffffff;">___</span><span style="color:#0000ff;">&lt;</span><span style="color:#a31515;">button</span> <span style="color:#ff0000;">dojoType</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;dijit.form.Button&#8221;<br />
</span><span style="color:#ffffff;">____</span><span style="color:#ff0000;">id</span><span style="color:#000000;">=</span><span style="color:#0000ff;">&#8220;submitButton&#8221;&gt;</span><span style="color:#000000;">Enviar</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">button</span><span style="color:#0000ff;">&gt;<br />
</span><span style="color:#ffffff;">__</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">form</span><span style="color:#0000ff;">&gt;<br />
</span><span style="color:#ffffff;">_</span><span style="color:#0000ff;">&lt;/</span><span style="color:#a31515;">div</span><span style="color:#0000ff;">&gt;<br />
&lt;/</span><span style="color:#a31515;">body</span><span style="color:#0000ff;">&gt;<br />
&lt;/</span><span style="color:#a31515;">html</span><span style="color:#0000ff;">&gt;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left">Abaixo o código para recebe_dados.php que será utilizado em nosso teste. O código está bem comentado, dispensando maiores&#8230; comentários hehehe.</p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#0000ff;">&lt;?</span><span style="color:#a31515;">php</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//endereço dojo no File System</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#464600;"><strong><br />
$DFS</strong></span><span style="color:#0000ff;">=</span><span style="color:#cc0000;">&#8220;c:/apache2.2/htdocs/dojo-release-1.3.0-src&#8221;</span><span style="color:#000000;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//classe JSON PHP do dojo</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#006600;"><br />
require</span><span style="color:#000099;">(</span><span style="color:#464600;"><strong>$DFS</strong></span><span style="color:#0000ff;">.</span><span style="color:#cc0000;">&#8220;/dojo/tests/resources/JSON.php&#8221;</span><span style="color:#000099;">)</span><span style="color:#000000;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">/*<br />
* Neste espaço poderiam haver tarefas para<br />
* salvar os dados em BD<br />
*<br />
*/</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#464600;">//monta uma string com os dados recebidos<strong><br />
$dr</strong></span> <span style="color:#0000ff;">=</span><span style="color:#cc0000;">&#8220;Dados recebidos:&#8221;</span><span style="color:#464600;">;<strong><br />
$dr</strong></span><span style="color:#0000ff;">.=</span><span style="color:#cc0000;">&#8221; ['nome': "</span><span style="color:#0000ff;">.</span><span style="color:#000000;">$_POST</span><span style="color:#0000ff;">[</span><span style="color:#cc0000;">"txt_nome"</span><span style="color:#0000ff;">].</span><span style="color:#cc0000;">&#8220;, &#8220;</span><span style="color:#464600;">;<strong><br />
$dr</strong></span><span style="color:#0000ff;">.=</span><span style="color:#cc0000;">&#8220;&#8216;endere&amp;ccedil;o&#8217;: &#8220;</span><span style="color:#0000ff;">.</span><span style="color:#000000;">$_POST</span><span style="color:#0000ff;">[</span><span style="color:#cc0000;">"txt_endereco"</span><span style="color:#0000ff;">]</span><span style="color:#464600;">;<strong><br />
$dr</strong></span><span style="color:#0000ff;">.=</span><span style="color:#cc0000;">&#8220;]&lt;br&gt;&#8221;</span><span style="color:#000000;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//Prepara a resposta de retorno em JSON, para<br />
//cada variável a + adicionar um item no array<br />
//com o nome da variável e seu respectivo valor</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#464600;"><strong>$ar</strong></span> <span style="color:#0000ff;">=</span> <span style="color:#006600;">array</span><span style="color:#000099;">(</span><span style="color:#cc0000;">&#8217;status&#8217;</span> <span style="color:#0000ff;">=&gt;</span> <span style="color:#cc0000;">&#8220;ok&#8221;</span><span style="color:#0000ff;">,</span><span style="color:#cc0000;"><br />
<span style="color:#ffffff;">____________</span>&#8216;msg&#8217;</span> <span style="color:#0000ff;">=&gt;</span> <span style="color:#464600;"><strong>$dr</strong></span><span style="color:#000099;">)</span><span style="color:#000000;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"> </span></span></p>
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//cria o objeto manipulador de JSON</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#464600;"><strong><br />
$json</strong></span> <span style="color:#0000ff;">=</span> <span style="color:#006600;">new</span> <span style="color:#000000;">Services_JSON</span><span style="color:#000099;">()</span><span style="color:#000000;">;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#3e3e3e;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;">//gera uma string com o conteúdo do vetor<br />
//codificado em JSON</span></span></span><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><span style="color:#0000ff;"><br />
echo</span> <span style="color:#464600;"><strong>$json</strong></span><span style="color:#0000ff;">-&gt;</span><span style="color:#000000;">encode</span><span style="color:#000099;">(</span><span style="color:#464600;"><strong>$ar</strong></span><span style="color:#000099;">)</span><span style="color:#000000;">;</span></span></span><span style="color:#0000ff;"><span style="font-family:Courier New,monospace;"><span style="font-size:x-small;"><br />
?&gt;</span></span></span></p>
<p class="western" style="margin-bottom:0;" align="left">
<p class="western" style="margin-bottom:0;" align="left">Podemos observar que recebe_dados.php, efetua a simples tarefa de receber os dados enviados, e devolvê-los através de variáveis codificadas em Json. É claro que recebe_dados.php poderia efetuar muitas outras tarefas, como por exemplo: verificar a validade dos dados recebidos, gravá-los no banco de dados, analisar o status da gravação no banco e gerar uma resposta e devolver. Porém vamos primar pela simplicidade por que o foco de nosso estudo é o funcionamento do xhrPost. Uma vez efetuadas as tarefas, o array PHP com as variáveis de resposta é lançado para o método encode do objeto $json, o qual retorna uma string JSON. Sempre que um browser roda um arquivo no servidor, e este possui um echo ou equivalente, uma strig de texto é devolvida para o browser automaticamente, e esta é exibida na tela. Porém em nosso caso o solicitante não foi diretamente o browser, porém o agente xhrPost que o fez enviando dados para o arquivo recebe_dados.php, naturalmente xhrPost aguarda alguma string de retorno vinda deste arquivo, pelo protocolo HTTP (veja novamente a figura 2). Juntando tudo isto, a resposta recebida virá em JSON, como no exemplo abaixo:</p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left"><strong>Variáveis:</strong></p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left"><span style="color:#0000ff;">“status” = ok,<br />
“msg” = Dados recebidos: ['nome': Leonir, 'endereço': Rua Ah\u002e002e. Programando...!]</span></p>
<p><strong>String Json:</strong></p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left"><span style="color:#0000ff;">{&#8220;status&#8221;:&#8221;ok&#8221;,&#8221;msg&#8221;:&#8221;Dados recebidos: ['nome': Leonir, 'endereço': Rua Ah\u002e002e. Programando...!]&#8220;} </span></p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left">Salve index.php, e recebe_dados.php na mesma pasta, de forma que vc possa acessar index.php através de seu servidor local. Aí é só colocar para rodar, estes códigos estão funcionando perfeitamente, foram testados, e copiados diretamente do editor PHP e Javascript que utilizo o APTANA.</p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left">
<p class="western" style="margin-bottom:0;" align="left"><span style="color:#ff0000;"><strong>Observação Importante:</strong></span> Ao copiar o código, e colar em seu editor substitua todas as aspas redigitando-as, ou através do search replace do editor. Isto devido ao fato que o wordpress substitui as aspas normais por umas mais bonitinhas porém inúteis, os interpretadores de código PHP e Javascript não as reconhecem.</p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left">É isto, experimente e deixe seu comentário.</p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="left">Abraço e até o próximo post.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/75/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=75&subd=ahaprogramando&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2009/04/27/ajax-enviar-conteudo-de-formulario-via-post-com-dojo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2009/04/metodo_com_post_http2.png" medium="image">
			<media:title type="html">Envio de dados via post pelo método tradicional.</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2009/04/metodo_com_xhrpost1.png" medium="image">
			<media:title type="html">Envio de dados com com dojo xhrPost, uma prática maneira de efetuar o envio via Ajax.</media:title>
		</media:content>
	</item>
		<item>
		<title>Instalação da Biblioteca Dojo</title>
		<link>http://ahaprogramando.wordpress.com/2009/04/26/instalacao-da-biblioteca-dojo/</link>
		<comments>http://ahaprogramando.wordpress.com/2009/04/26/instalacao-da-biblioteca-dojo/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 18:56:09 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[DOJO]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[biblioteca Javascript]]></category>
		<category><![CDATA[DOJO toolkit]]></category>
		<category><![CDATA[WIDGET DOJO]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=55</guid>
		<description><![CDATA[Tutorial prático sobre a instalação da biblioteca de farramentas Javascript Dojo.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=55&subd=ahaprogramando&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p class="western" style="margin-bottom:0;font-weight:normal;" align="justify"><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } --></p>
<p><!-- 	 	 --></p>
<p align="justify"><!-- 	 	 --></p>
<p>Como frequentemente tenho escrito algum post direcionado a utilização das ferramentas dojo, decidi criar um tutorial enxuto dedicado apenas a instalação e testes do dojo. Posso adiantar que trata-se de uma tarefa muito simples!</p>
<p>O Dojo é um conjunto de ferramentas javascript (dojo toolkit &#8211; por conveniência em português  gosto de chamar biblioteca dojo) cheio de recursos para enriquecer a experiência do usuário. Sei que já falei sobre o assunto em outro post, mas vale a pena reforçar. Para encontrar o Dojo Toolkit acesse:</p>
<p align="justify"><a title="Acesso direto à area de downloads Dojo" href="http://www.dojotoolkit.org/downloads" target="_blank">http://www.dojotoolkit.org/downloads</a></p>
<p align="justify">localize o link &#8220;<strong>All Downloads</strong>&#8221; e acesse-o, a seguir escolha (bem no topo) o link &#8220;<strong>Download latest Stable Releaze x.x.x</strong>&#8221; (atualmente na versão 1.3.0, a qual adotaremos neste exemplo). Neste ponto vc irá se deparar com uma página abarrotada de links para download, que são diversas versões da biblioteca em compactações tar, zip, com os arquivos fontes já compactados pelo shrinksafe, outras com toda a bilbioteca com os arquivos fontes (abertos e comentados). Nos interessam apenas 2 downloads, a saber:</p>
<p align="justify"><strong>dojo-release-1.3.0-src.zip</strong> &#8211; versão totalmente aberta, na qual vem exemplos junto, e vc pode acessar o código fonte. É a ideal para suas experiências na máquina local onde vc desenvolve seus projetos. Tamanho: 22 M.Bytes (43 MBytes descompactado)</p>
<p><strong>dojo-release-1.3.0.zip</strong> &#8211; versão enxuta, sem exemplos e sem os comentários nos códigos. Ideal para fazer upload ao servidor. Tamanho: 3.4 MBytes ( 8,67  MBytes descompactado)</p>
<p>Baixe sua versão para desenvolvimento, e descompacte-a para a pasta do localhost (no meu servidor Apache a pasta fica em c:\Apache2.2\htdocs\, de forma que ao ter baixado e descompactado fica: C:\Apache2.2\htdocs\dojo-release-1.3.0-src.</p>
<h2><strong>Testando 1&#8230;2&#8230;3&#8230;</strong></h2>
<p align="justify">A partir daí vc pode se divertir com os exemplos que acompanham a biblioteca. É um show, tem até arte de computação gráfica direto no browser sem usar Flash. Puxa&#8230; se não fosse uma ferramenta gratuita eu cobraria do Dojo por frases como esta hahaha.</p>
<p align="justify">Para encontrar os exemplos, abra com o windows explorer a pasta raiz do dojo (dojo-release-1.3.0-src) e faça uma pesquisa por &#8220;test_*.html&#8221;. Uma lista com mais de 350 exemplos é apresentada nesta versão. Basta abrir o arquivo HTML.</p>
<p class="western" style="margin-bottom:0;text-align:justify;">
<div id="attachment_56" class="wp-caption alignnone" style="width: 510px"><span><span><span><img class="size-full wp-image-56" title="pesquisa_arquivos_test_dojo" src="http://ahaprogramando.files.wordpress.com/2009/04/pesquisa_arquivos_test_dojo.png?w=500&#038;h=324" alt="Figura 1 - Pesquisando arquivos de teste" width="500" height="324" /></span></span></span><p class="wp-caption-text">Figura 1 - Pesquisando arquivos de teste</p></div>
<p><!-- 	 	 --></p>
<p align="justify">Para abrir um deles clique (ex: test_Tooltip.html) e abra com o browser, o endereço: <strong>file:///C:/Apache2.2/htdocs/dojo-release-1.3.0-src/dijit/tests/test_Tooltip.html</strong> será apresentado. Substitua o caminho até <strong>htdocs </strong>pelo endereço do servidor <strong>http://localhost/dojo-release-1.3.0-src/dijit/tests/test_Tooltip.html</strong> e pronto o exemplo estará rodando certinho.</p>
<p class="western" style="margin-bottom:0;text-align:justify;">
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/55/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=55&subd=ahaprogramando&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2009/04/26/instalacao-da-biblioteca-dojo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2009/04/pesquisa_arquivos_test_dojo.png" medium="image">
			<media:title type="html">pesquisa_arquivos_test_dojo</media:title>
		</media:content>
	</item>
		<item>
		<title>Passar array de PHP para Javascript, e de Javascript para PHP</title>
		<link>http://ahaprogramando.wordpress.com/2008/11/29/passar-array-de-php-para-javascript-e-de-javascript-para-php/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/11/29/passar-array-de-php-para-javascript-e-de-javascript-para-php/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 14:51:26 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[variáveis Javascript]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=33</guid>
		<description><![CDATA[Nenhum post deste blog fez tanto sucesso quanto: &#8220;Como passar valores do PHP para o Javascript e vice versa?&#8221;. Porém tenho recebido solicitações para informar como efetuar esta tarefa com um array de valores. Demorou mas a hora chegou!
Em primeiro lugar precisamos ter em mente que array consta de uma coleção de dados em uma única [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=33&subd=ahaprogramando&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Nenhum post deste blog fez tanto sucesso quanto: &#8220;Como passar valores do PHP para o Javascript e vice versa?&#8221;. Porém tenho recebido solicitações para informar como efetuar esta tarefa com um <strong>array</strong> de valores. Demorou mas a hora chegou!</p>
<p>Em primeiro lugar precisamos ter em mente que array consta de uma coleção de dados em uma única variável. E o acesso ao seu conteúdo é gerenciado pela ENGINE da linguagem, associando um endereço a cada item na memória do computador.  Não adianta em PHP por exemplo, dar um <strong>echo</strong> <span style="color:#008000;"><strong>$array_dados</strong></span> e esperar que todas as posições desta variável sejam mostradas, pois estamos falando de uma variável complexa, que possui um endereço específico para cada informação nela contida. Neste caso, para ver o conteúdo da variável, ou se faz uso de uma tradicional varredura com looping&#8217;s, ou de um recurso muito útil para debug quando há arrays envolvidos, o <span style="color:#0000ff;">print_r</span>(<span style="color:#008000;"><strong>$array_dados</strong></span>).</p>
<p><strong>Enviando um Array do PHP para um código JavaScript presente na página:<br />
</strong></p>
<p>Não vou me deter aqui nos fundamentos sobre PHP e Javascript, já que este assunto foi exaustivamente abordado em outros posts. Todavia para quem deseja conhecer mais sobre o comportamento destas linguagens em servidores e browsers visite estes posts:</p>
<p><a title="PHP ou Javascript? Qual a diferença?" href="http://ahaprogramando.wordpress.com/2008/04/05/php-ou-javascript-qual-a-diferenca/" target="_blank">PHP ou Javascript? Qual a diferença?</a></p>
<p><a title="Como passar valores do PHP para o Javascript e vice versa?" href="http://ahaprogramando.wordpress.com/2008/01/19/6/" target="_blank">Como passar valores do PHP para o Javascript e vice versa?</a></p>
<p><strong>Continuando&#8230;</strong></p>
<p>Não podemos esquecer portanto, que o trafego de dados via protocolo HTTP entre browser e servidor é sempre textual, e que enquanto o PHP está trabalhando no lado do servidor, o Javascript faz suas tarefas no cliente (browser). Logo se desejamos enviar o conteúdo de um array que está presente em um arquivo PHP, para um código em Javascript, este conteúdo precisa trafegar do servidor ao browser junto com o HTML e códigos javascript. Sendo assim é  necessário transformar o conteúdo deste array em uma string (lembre-se: via protocolo HTTP só trafega texto). Então, se o array possuir 10 itens endereçados de 0 a 9, basta construir uma string separando os elementos por algum caractere que nunca vá ser usado no conteúdo dos ítens. Por exemplo: se meu array tem 2 posições com o conteudo: <span style="color:#ff0000;">0</span><span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;tic-tac&#8221;</span>,<span style="color:#ff0000;">1</span><span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;bla-bla-bla&#8221;</span>, fica claro que não convém criar uma string com os 2 elementos separando-os por ífem <span style="color:#ff0000;">&#8220;-&#8221;</span>. Geralmente os desenvolvedores usam vírgula com o fim de separar os elementos. Particularmente prefiro o caractere pipe <span style="color:#ff0000;">&#8220;|&#8221;</span>, devido ao fato que este não consta nas regras da língua portuguesa para qualquer função, ocasionando que não estará presente em textos normais. Assim o resultado da string com elementos delimitados para um array com o conteúdo de 2 itens (<span style="color:#ff0000;">0</span><span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;tic-tac&#8221;</span>,<span style="color:#ff0000;">1</span><span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;bla-bla-bla&#8221;</span>) seria transformado em uma simples string:<br />
<span style="color:#ff0000;">&#8220;tic-tac|</span><span style="color:#ff0000;">bla-bla-bla&#8221;<span style="color:#000000;">.</span></span></p>
<p><strong>Ok, qual a melhor maneira de fazer isto ?</strong></p>
<p><span style="color:#ff0000;"><span style="color:#000000;">No manual do PHP encontramos:</span><span style="color:#000000;"><br />
<span style="color:#000080;"><strong><span style="color:#000080;">implode</span></strong><span style="color:#000080;"><br />
(PHP 4, PHP 5)</span></span></span></span></p>
<p><span style="color:#000080;"><strong>implode</strong> — Junta elementos de uma matriz em uma string</span></p>
<p><span style="color:#000080;">Descrição<br />
string implode ( string $agrupador, array $elementos )</span></p>
<p><span style="color:#000080;">Retorna uma string contendo os elementos da matriz na mesma ordem com uma ligação entre cada elemento.</span></p>
<p><span style="color:#ff0000;"><span style="color:#000000;">Beleza já sabemos como fazer o trabalho no PHP. Então mãos à obra: Suponhamos que nossa página pertence a uma loja (</span></span><span style="color:#ff0000;"><span style="color:#000000;">que por sinal oferece produtos bastante diversificados), e de alguma forma temos em PHP um array com a lista de produtos. E precisamos dispor esta lista em uma variável javascript, para que alguma tarefa seja feita em Javascript, poderia ser o preenchimento de um list por exemplo.</span></span></p>
<p>&lt;?<span style="color:#ff0000;"><strong>php<br />
</strong><span style="color:#888888;">//array com a lista de produtos</span></span><br />
<strong><span style="color:#008000;">$produtos</span></strong> = <span style="color:#0000ff;">array(</span><span style="color:#ff0000;">0</span> =&gt;<span style="color:#ff0000;">&#8220;relogio digital&#8221;</span>,<br />
<span style="color:#ff0000;">1</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;mouse&#8221;</span>,<br />
<span style="color:#ff0000;">2 </span><span style="color:#0000ff;">=&gt;</span>&#8220;<span style="color:#ff0000;">arame para cerca&#8221;</span>,<br />
<span style="color:#ff0000;">3</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;bateria de celular&#8221;</span>,<br />
<span style="color:#ff0000;">4</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;doce de abobora&#8221;</span>,<br />
<span style="color:#ff0000;">5</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;tv de plasma&#8221;</span>,<br />
<span style="color:#ff0000;">6</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;pacote de pregos&#8221;</span>,<br />
<span style="color:#ff0000;">7</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;peneu de caminhao&#8221;</span>,<br />
<span style="color:#ff0000;">8</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;polvora&#8221;</span>,<br />
<span style="color:#ff0000;">9</span> <span style="color:#0000ff;">=&gt;</span><span style="color:#ff0000;">&#8220;prato de porcelana&#8221;</span><span style="color:#0000ff;">)</span>;<br />
<span style="color:#808080;"><br />
//criando a string com a versátil função php implode</span><br />
<span style="color:#008000;"><strong>$string_array</strong></span> = <span style="color:#0000ff;">implode(</span><span style="color:#ff0000;">&#8220;|&#8221;</span>, <strong><span style="color:#008000;">$produtos</span></strong><span style="color:#0000ff;">)</span>;<br />
?&gt;</p>
<p>A essa altura um simples <strong>echo</strong> <span style="color:#ff0000;"><span style="color:#000000;"><span style="color:#008000;"><strong>$string_array</strong></span></span></span> mostraria o resultado. Agora precisamos fazer que a string seja recebida em uma variável javascript, muito simples, basta um &lt;?<span style="color:#ff0000;"><strong>php</strong></span> <strong>echo</strong> <span style="color:#008000;"><strong>$string_array</strong></span>; ?&gt; no meio do código Javascript. Ora, este é o mesmo método para enviar valores do PHP para o meio do HTML.</p>
<p>Depois disto esta string deve ser convertida em um array  Javascript. Uma consulta rápida:</p>
<p>Em JavaScript Bilbe 5th (Danny Goodman with Michael Morrison) encontramos a função:</p>
<p><span style="color:#000080;">string.split(“delimiterCharacter” [, limitInteger])<br />
Returns: Array of delimited items.<br />
Compatibility: WinIE4+, MacIE4+, NN3+, Moz1+, Safari1+, testei também no Chrome e funfa!!!</span></p>
<p>Aplicar é fácil (perceba que o código PHP de linhas atrás  e o que vem a seguir estão presentes no mesmo arquivo) :</p>
<p>&lt;script&gt;<br />
<span style="color:#808080;">//variáveis</span><br />
<span style="color:#333399;"><strong>var</strong></span> i, array_produtos, string_array;<br />
<span style="color:#808080;">//recebe a string com elementos separados, vindos do PHP</span><br />
string_array = <span style="color:#0000ff;">&#8220;</span>&lt;?<span style="color:#ff0000;"><strong>php</strong></span> <strong>echo</strong> <span style="color:#008000;"><strong>$string_array</strong></span>; ?&gt;<span style="color:#0000ff;">&#8220;</span>;<br />
<span style="color:#808080;">//transforma esta string em um array próprio do Javascript</span><br />
array_produtos = string_array.split<span style="color:#333399;"><strong>(</strong></span><span style="color:#0000ff;">&#8220;|&#8221;</span><strong><span style="color:#333399;">)</span></strong>;</p>
<p><span style="color:#808080;">//varre o array só pra mostrar que tá tudo ok</span><br />
<span style="color:#333399;"><strong>for</strong></span> <strong><span style="color:#333399;">(</span></strong>i <strong><span style="color:#333399;">in</span></strong> array_produtos<span style="color:#333399;"><strong>)</strong></span><br />
alert<span style="color:#333399;"><strong>(</strong></span>array_produtos<span style="color:#333399;"><strong>[</strong></span>i<strong><span style="color:#333399;">])</span></strong>;</p>
<p>&lt;/script&gt;</p>
<p><span style="color:#ff0000;"><span style="color:#000000;">Uma beleza não? E vice-versa também é possível? Vejamos:<br />
</span></span></p>
<p><span style="color:#ff0000;"><span style="color:#000000;">Agora se vc possui um array que está no código JavaScript e deseja enviar para o PHP a fins de salvamento em banco de dados e tal, segue a mesma forma: transformar array em string, e para envio segue a via ilustrada no post sobre troca de dados entre JavaScript e PHP.</span></span></p>
<p>Mais um Help na bíblia do Javascript:</p>
<p><span style="color:#ff0000;"><span style="color:#000000;"><span style="color:#000080;">array.join(separatorString)<br />
Returns: String of entries from the array delimited by the separatorString value.<br />
Compatibility: WinIE4+, MacIE4+, NN3+, Moz1+, Safari1+, no Chrome testei e tá blz!!</span></span></span></p>
<p><span style="color:#ff6600;">&lt;form method=<span style="color:#0000ff;">&#8220;post&#8221;</span> action=<span style="color:#0000ff;">&#8220;recebe.php&#8221;</span> &gt;<br />
&lt;input type=<span style="color:#0000ff;">&#8220;hidden&#8221;</span> id=&#8221;<span style="color:#0000ff;">send_string_array&#8221;</span> name=<span style="color:#0000ff;">&#8220;send_string_array&#8221;</span> value=<span style="color:#0000ff;">&#8220;&#8221;</span> /&gt;<br />
&lt;input type=<span style="color:#0000ff;">&#8220;submit&#8221;</span> value=<span style="color:#0000ff;">&#8220;Enviar&#8221;</span> /&gt;<br />
&lt;/form&gt; </span><br />
&lt;script&gt;<br />
<span style="color:#3366ff;">document</span>.getElementById(<span style="color:#0000ff;">&#8220;send_string_array&#8221;</span>).value = array_produtos.<span style="color:#3366ff;">join</span>(<span style="color:#0000ff;">&#8220;|&#8221;</span>);<br />
&lt;/script&gt;</p>
<p>Agora basta receber a string que será enviada via POST, e transformá-la em array:</p>
<p><span style="color:#000080;">No manual do PHP:</span></p>
<p><span style="color:#000080;">(PHP 4, PHP 5)</span></p>
<p><span style="color:#000080;">explode — Divide uma string em strings</span></p>
<p><span style="color:#000080;">Descrição<br />
array explode ( string $separator, string $string [, int $limit] )</span></p>
<p><span style="color:#000080;">Retorna uma matriz de strings, cada uma como substring de string formada pela divisão dela a partir de fronteiras presentes nela separator. Se limit está definido, a matriz retornada conterá o máximo de limit elementos com o último elemento contendo o resto da string.</span><br />
<span style="color:#000000;"><br />
Note que o código a seguir está em um arquivo separado, destinado a receber dados enviados por um fomulário, ou seja este é o recebe.php:</span></p>
<p>&lt;?</p>
<p><span style="color:#808080;">//transforma a string de itens separados em array</span><br />
<span style="color:#008000;"><strong>$array_produtos</strong></span> = <span style="color:#0000ff;">explode</span>(<span style="color:#ff0000;">&#8220;|&#8221;</span>, <span style="color:#0000ff;">$_POST</span>[<span style="color:#ff0000;">'send_string_array'</span>]);<br />
<span style="color:#808080;">//mostra o conteúdo do array</span><br />
<span style="color:#0000ff;">print_r</span>($array_produtos);</p>
<p>?&gt;</p>
<p>É isto, todo este código foi testado antes de escrever o POST.<br />
Grande Abraço.</p>
<p> </p>
<p><span style="color:#0000ff;"><span style="color:#ff0000;"><strong>[</strong></span></span><span style="color:#0000ff;"><span style="color:#ff0000;"><span style="color:#ff0000;"><strong>15/01/2009 - Edição]  - Ao copiar trechos de código, dos posts do Ahã Programando, substitua todas as aspas redigitando-as. Pois o WordPress substitui as aspas originais por algumas que são inúteis em programação. E os testes acabam não funcionando, deixando os entusiastas da programação web frustrados.  </strong></span><span style="color:#ff0000;"><strong><span style="color:#008000;">Não desista! Tente novamente <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </span></strong></span></span><br />
</span></p>
<div></div>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/33/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=33&subd=ahaprogramando&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/11/29/passar-array-de-php-para-javascript-e-de-javascript-para-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>
	</item>
		<item>
		<title>Galeria de Fotos LightBox com Dojo (sem escrever código js)</title>
		<link>http://ahaprogramando.wordpress.com/2008/09/13/javascript-e-lightbox-com-dojo/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/09/13/javascript-e-lightbox-com-dojo/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 15:44:38 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[DOJO]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Layout CSS]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[galeria de fotos]]></category>
		<category><![CDATA[lightbox]]></category>
		<category><![CDATA[navegador de fotos]]></category>
		<category><![CDATA[WIDGET DOJO]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=16</guid>
		<description><![CDATA[Tenho estado um pouco afastado dos desenvolvimentos WEB, por que em fevereiro deste ano mudei o foco do meu trabalho ao entrar na área de TI de uma empresa, mas agora tenho um laboratório de experiências para incrementar e colocar coisinhas &#8220;Jasvascriptáveis&#8221;, trata-se da página www.ligazimmermann.com.br . Como o próprio nome pode informar, o intuito [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=16&subd=ahaprogramando&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Tenho estado um pouco afastado dos desenvolvimentos WEB, por que em fevereiro deste ano mudei o foco do meu trabalho ao entrar na área de TI de uma empresa, mas agora tenho um laboratório de experiências para incrementar e colocar coisinhas &#8220;Jasvascriptáveis&#8221;, trata-se da página <a title="www.ligazimmermann.com.br" href="www.ligazimmermann.com.br">www.ligazimmermann.com.br</a> . Como o próprio nome pode informar, o intuito do site é ser um informativo sobre a liga da família Zimmermann. Ok continuando com WEB development&#8230;  Se eu sonhasse a alguns anos atrás que um dia seria tão fácil colocar efeitos legais em um página de internet. Vibrava com o resultado de semanas de programação Javascript para adicionar um menu-pop up, ou fazer um sistema de ordenar fotos. Pois bem&#8230; hoje existe um recurso poderoso para fazer coisas &#8220;fantáhhhdicas&#8221; sem sequer escrever uma linha de Javascript. Volto (é claro&#8230;) a bater na tecla do Dojo, pois nesta semana adicionei na página de eventos (<a title="http://www.ligazimmermann.com.br/?imnu=2" href="http://www.ligazimmermann.com.br/?imnu=2">http://www.ligazimmermann.com.br/?imnu=2</a>) do site uma galeria de fotos usando uma das ferramentas presentes no Dojo: o widget LightBox . LightBox é uma forma de apresentar imagens em um quadro modal, ou seja, ele toma conta de toda a tela do browser e não permite que as demais áreas do site estejam acessíveis, e já incorpora controles de avanço e retrocesso do grupo de imagens.</p>
<p><a href="http://ahaprogramando.files.wordpress.com/2008/09/lightbox.jpg"><img class="aligncenter size-full wp-image-17" title="lightbox" src="http://ahaprogramando.files.wordpress.com/2008/09/lightbox.jpg?w=400&#038;h=293" alt="" width="400" height="293" /></a></p>
<p>O efeito é legal, porém não é o que mais me impressiona, o que causa realmente impacto para o WEB designer é a facilidade de adicionar este recurso. Precisamos lembrar que o Dojo é uma biblioteca Javascript gratuíta que tem como principal vantagem não precisar programar recursos básicos. Basta configurar os requisitos mínimos e adicionar tag&#8217;s HTML marcadas como pertencentes a algum utilitário (<strong>widget</strong>) Dojo, e ele fará o restante do trabalho encima destas tags.</p>
<p>No caso em questão, eu já tinha efetuado todas as configurações para que funcionassem os &#8220;Tooltips&#8221; na página. E para adicionar o widget &#8220;LightBox&#8221; basicamente precisei incluir 2 linhas, uma invocando o arquivo: Javascript &#8220;dojox/image/Lightbox.js&#8221; e outra para adicionar o CSS que deixa no LightBox tudo em seu lugar: &#8220;dojox/image/resources/image.css&#8221;.  Vamos ver aqui na íntegra todas as configurações que estão na página em questão.</p>
<h3>Analisando os ítens da receita&#8230;</h3>
<p>Na linha abaixo invoca o núcleo da biblioteca &#8220;dojo.js&#8221;, e configura pra não mostrar o debug na página (<span style="color:#0000ff;"><span class="attribute-value">isDebug:false</span></span>), e para que o Dojo procure por tag&#8217;s com Wigets ao carregar toda a página (<span style="color:#0000ff;"><span class="attribute-value">parseOnLoad: true</span></span>)</p>
<p>&lt;<strong><span style="color:#333399;"><span class="start-tag">script</span></span></strong><span class="attribute-name"> <strong>type</strong></span>=<span class="attribute-value"><span style="color:#0000ff;">&#8220;text/javascript&#8221;<br />
</span></span><strong><span class="attribute-name">src</span></strong>=<span class="attribute-value"><span style="color:#0000ff;">&#8220;/dojo-release-1.1.1/dojo/dojo.js&#8221;</span><br />
</span><span class="attribute-name"> <strong>djConfig</strong></span>=<span style="color:#0000ff;"><span class="attribute-value">&#8220;isDebug:false, parseOnLoad: true&#8221;</span></span>&gt;&lt;/<strong><span style="color:#333399;"><span class="end-tag">script</span></span></strong>&gt;</p>
<p>Agora devem ser especificadas configurações como os includes necessários e configuração da classe css que será utilizada, o Dojo possui algumas &#8220;skins&#8221; que vc pode escolher para modificar a aparência de seus widgets. No caso ficamos com &#8220;tundra&#8221;.</p>
<p>&lt;<strong><span style="color:#333399;"><span class="start-tag">script</span></span></strong><span class="attribute-name"> <strong>type</strong></span>=<span style="color:#0000ff;"><span class="attribute-value">&#8220;text/javascript&#8221;</span></span>&gt;<br />
<span style="color:#808080;">//aplica classe CSS &#8220;tundra&#8221; na TAG body do site </span><br />
dojo.addOnLoad(function(){dojo.addClass(dojo.body(),<span style="color:#0000ff;">&#8220;tundra&#8221;</span>);});<br />
dojo.require(&#8220;dijit.Tooltip&#8221;);<span style="color:#808080;">//include para o Tooltip</span><br />
dojo.require(&#8220;dojo.parser&#8221;);<span style="color:#808080;">//este deve estar sempre</span><br />
&lt;/<span style="color:#333399;"><strong><span class="end-tag">script</span></strong></span>&gt;</p>
<p>E como estamos falando do LightBox, aqui se adiciona o javascript da biblioteca que é responsável pelo recurso:</p>
<p>&lt;<strong><span style="color:#333399;"><span class="start-tag">script</span></span></strong><span class="attribute-name"> <strong>type</strong></span>=<span class="attribute-value"><span style="color:#0000ff;">&#8220;text/javascript&#8221;</span> </span><strong><span class="attribute-name"><br />
src</span></strong>=<span style="color:#0000ff;"><span class="attribute-value">&#8220;/dojo-release-1.1.1/dojox/image/Lightbox.js&#8221;</span></span>&gt;&lt;/<strong><span style="color:#333399;"><span class="end-tag">script</span></span></strong>&gt;</p>
<p>No que tange a Javascript até aqui tá concluído, agora vamos aos arquivos css básicos da página mais os que que pertencem ao dojo.  Ah e já falei sobre <strong>@import</strong> usado para linkar o arquivos css em outro artigo do Ahã&#8230; Programando&#8230;, é uma forma de carregar os arquivos CSS com um código mais limpo .</p>
<p>&lt;<strong><span style="color:#333399;"><span class="start-tag">style</span></span></strong><span class="attribute-name"> <strong>type</strong></span>=<span style="color:#0000ff;"><span class="attribute-value">&#8220;text/css&#8221;</span></span>&gt;<br />
@import url(<span style="color:#0000ff;">&#8220;/css/style.css&#8221;</span>);<br />
@import url(<span style="color:#0000ff;">&#8220;/dojo-release-1.1.1/dijit/themes/tundra/tundra.css&#8221;</span>);<br />
@import url(<span style="color:#0000ff;">&#8220;/dojo-release-1.1.1/dojo/resources/dojo.css&#8221;</span>);<br />
@import url(<span style="color:#0000ff;">&#8220;/dojo-release-1.1.1/dojox/image/resources/image.css&#8221;</span>);<br />
&lt;/<strong><span style="color:#333399;"><span class="end-tag">style</span></span></strong>&gt;</p>
<p>O último<strong> @import</strong> feito é para o CSS utilizado pelo widget LightBox.</p>
<p>Feitooo, agora temos todos os recursos prontos para serem utilizados, quantas linhas de código Javascript serão necessárias para adicionar as fotos? Nenhuma! Pera aê&#8230; não tem que criar os eventos onclick ou coisa parecida para navegar entre as fotos? Nope! Como escrevi em linhas atrás, o Dojo fará tudo por vc se ele encontrar um tag HTML que pertenca a um brinquedo dele (Widget). Assim fica fácil incluir quantas fotos forem necessárias e com um código HTML limpíssimo:</p>
<p>&lt;<strong><span style="color:#333399;">a</span></strong> <strong>href</strong>=<span style="color:#0000ff;">&#8220;fotos_ev2004/z2004f1.jpg&#8221;</span> <strong><br />
dojoType</strong>=<span style="color:#0000ff;">&#8220;dojox.image.Lightbox&#8221;</span> <strong><br />
group</strong>=<span style="color:#0000ff;">&#8220;group1&#8243;</span><br />
<strong>title</strong>=<span style="color:#0000ff;">&#8220;Entrada no Ginasi&amp;atilde;o&#8221;</span>&gt;Foto 1&lt;/<strong><span style="color:#333399;">a</span></strong>&gt;</p>
<h3>Tudo explicadinho nos mínimos detalhes&#8230;</h3>
<p>A tag &lt;<span style="color:#333399;"><strong>a</strong></span>&gt; é básica para links, o atributo <strong>href</strong> de um link tradicional recebe o endereço URL para o qual vc quer apontar. Mas aqui o novo atributo: <strong>dojoType</strong>,<strong> </strong>define que esta tag &lt;<strong><span style="color:#333399;">a</span></strong>&gt; deixa de ser uma tag tradicional para se tornar um widget Dojo, que em nosso caso será o da classe <span style="color:#0000ff;">&#8220;dojox.image.Lightbox<span style="color:#000000;">&#8220;.<br />
</span></span></p>
<p>O atributo <strong>group</strong> serve para indicar que a foto representada pela tag &lt;<strong><span style="color:#333399;">a</span></strong>&gt; pertence a um grupo, de forma que todas as fotos que pertencem a este devem ser identificadas com o mesmo nome de grupo. Assim se existirem na página 20 fotos em 2 grupos, ou seja  10 fotos para cada grupo,  o LightBox saberá que quando estiver navegando nas fotos do primeiro grupo não deverá invadir a lista de fotos do segundo grupo.</p>
<p>E por fim o atributo <strong>title</strong> onde deve ser especificado um comentário sobre a foto. Se quiser dá pra incrementar o visual e entre &lt;<strong><span style="color:#333399;">a</span></strong>&gt; e &lt;/<span style="color:#333399;"><strong>a</strong></span>&gt; colocar um &lt;<span style="color:#333399;"><strong>img</strong></span>&gt; com um thumb da foto, fica massa!</p>
<p>É isso&#8230; se quiser ver o LlightBox funcionando visite o link: <a title="http://www.ligazimmermann.com.br/?imnu=2" href="http://www.ligazimmermann.com.br/?imnu=2">http://www.ligazimmermann.com.br/?imnu=2</a></p>
<p>Reforcei aqui a idéia de que não precisa nem programar para usar a maioria dos widgets Dojo, mas quero deixar claro que não ignoro o fato de que o Dojo ofereça suporte a programação de recursos avançados.  O que é ótimo para quem quer tornar as coisas mais dinâmicas, tratando eventos, ligando widgets com outras funcionalidades&#8230; etc. Basta investigar e ver que o Dojo é forte nesta parte também, inclusive existe uma lista das classes da API Dojo que pode ser conhecida no link: <a title="http://api.dojotoolkit.org/jsdoc/dojo" href="http://api.dojotoolkit.org/jsdoc/dojo">http://api.dojotoolkit.org/jsdoc/dojo</a>.</p>
<p>Abraço e até o próximo artigo!</p>
<p><span style="color:#0000ff;"><strong><span style="color:#ff0000;">[</span></strong></span><span style="color:#0000ff;"><strong><span style="color:#ff0000;">15/01/2009 - Edição problema grave no wordpress]  - Ao copiar trechos de código, dos posts do Ahã Programando, substitua todas as aspas redigitando-as. Pois o WordPress substitui as aspas originais por algumas que são inúteis em programação. E os testes acabam não funcionando, deixando os entusiastas da programação web frustrados.  <span style="color:#008000;">Não desista! Tente novamente <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </span></span></strong><br />
</span><span id="more-16"></span></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ahaprogramando.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ahaprogramando.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=16&subd=ahaprogramando&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/09/13/javascript-e-lightbox-com-dojo/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2008/09/lightbox.jpg" medium="image">
			<media:title type="html">lightbox</media:title>
		</media:content>
	</item>
		<item>
		<title>Sessão / Sessões em PHP</title>
		<link>http://ahaprogramando.wordpress.com/2008/06/21/sessao-sessoes-em-php/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/06/21/sessao-sessoes-em-php/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 04:15:56 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[sessões]]></category>
		<category><![CDATA[sessões php]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=15</guid>
		<description><![CDATA[Em primeiro lugar vc precisa sacar por que elas são necessárias. Quando um browser termina de carregar determinada página, a conexão entre ele e o servidor é desfeita. Não confunda conexão de internet com a conexão entre browser e servidor, esta última refere-se a comunicação entre eles.  Assim após o carregamento browser e servidor ficam [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=15&subd=ahaprogramando&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Em primeiro lugar vc precisa sacar por que elas são necessárias. Quando um browser termina de carregar determinada página, a conexão entre ele e o servidor é desfeita. Não confunda conexão de internet com a conexão entre browser e servidor, esta última refere-se a comunicação entre eles.  Assim após o carregamento browser e servidor ficam separados, um não sabe o que o outro está fazendo. Então, quando vc solicitar outra página, o servidor não tem nem idéia mais do que vc fez na última conexão, pois para pedir esta nova página o browser se reconecta ao mesmo endereço do servidor e pede a outra página, detonando com a conexão assim que esta também carregar. Digo isto levando em consideração que as 2 páginas são do mesmo site e pertencem ao mesmo servidor.</p>
<p>A sessão não é uma coisa do PHP, mas do servidor. É uma área na memória do servidor que guarda o IP, da máquina que a acessou e qual browser que se conectou, a esta área de memória podem ser associadas outras informações que vc queira guardar, no estilo de variáveis. O PHP, é claro, possui uma ferramenta para manipular sessões do servidor. Assim, em um caso de login por exemplo, vc se loga e guarda numa sessão informações que indiquem aquele usuário está logado. Aí mesmo que a conexão seja desfeita, ao reconectar para carregar a próxima página, o servidor pode recorrer a sessão e ver que informações estão lá guardadas, como no caso, esta informação, pode dizer ao servidor: &#8220;sim ele está logado, e pode acessar esta página&#8221;.</p>
<p>Exemplo:</p>
<p>Para manipular sessoes no PHP:</p>
<p>arquivo1.php<br />
&lt;?<br />
session_start();<span style="color:#999999;">//inicializa o serviço da sessão<br />
</span><br />
<span style="color:#999999;">//cria uma variável do tipo sessão com a informação &#8220;sim&#8221;</span><br />
$_SESSION['esta_logado'] = &#8220;sim&#8221;;<br />
?&gt;</p>
<p>arquivo2.php<br />
&lt;?<br />
session_start();<span style="color:#999999;">//inicializa o serviço da sessão</span><br />
echo $_SESSION['esta_logado'];<span style="color:#999999;">//vai imprimir: &#8220;sim&#8221;</span></p>
<p>?&gt;<br />
Isto gera a ilusão de que a variável &#8220;esta_logado&#8221; foi passada de uma página para a outra, porém ela foi buscada da sessão no servidor. Simples, fácil&#8230; mas uma ferramenta útil e poderosa!</p>
<p>Até a próxima!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ahaprogramando.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ahaprogramando.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=15&subd=ahaprogramando&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/06/21/sessao-sessoes-em-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>
	</item>
		<item>
		<title>PHP ou Javascript? Qual a diferença?</title>
		<link>http://ahaprogramando.wordpress.com/2008/04/05/php-ou-javascript-qual-a-diferenca/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/04/05/php-ou-javascript-qual-a-diferenca/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 03:15:46 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[javascript versus php]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=13</guid>
		<description><![CDATA[Em perguntas que tenho recebido de leitores do Ahã&#8230; Programando&#8230; tenho percebido que alguns tem dificuldade de perceber a diferença de trabalho do PHP e do Javascript. Em linhas gerais quero tentar lançar alguma luz sobre o entendimento das funcionalidades destas ferramentas.
Em primeiro lugar vamos entender a internet:
O browser &#8211; Este tem as conexões com [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=13&subd=ahaprogramando&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Em perguntas que tenho recebido de leitores do Ahã&#8230; Programando&#8230; tenho percebido que alguns tem dificuldade de perceber a diferença de trabalho do PHP e do Javascript. Em linhas gerais quero tentar lançar alguma luz sobre o entendimento das funcionalidades destas ferramentas.</p>
<p><strong>Em primeiro lugar vamos entender a internet:</strong></p>
<p>O browser &#8211; Este tem as conexões com o servidor restritas ao momento de receber o conteúdo solicitado pelo usuário. Após a página ser carregada por completo a conexão é desfeita. Assim não há conhecimento por parte do servidor quanto ao que o usuário está fazendo com a página carregada no browser. E após o carregamento da página o servidor somente entrará em cena novamente quando o usuário clicar em um link, um botão de enviar ou coisa semelhante, aí novamente o browser irá localizar o servidor na web e solicitar a execução de algum serviço que traga outro conteúdo.</p>
<p>HTML &#8211; Hypertext Markup Language (linguagem de marcação de texto). Em sua essência o HTML é texto, só que com marcações denominadas TAG&#8217;s, delimitadas pelos caracteres &#8220;&lt;&#8221; e &#8220;&gt;&#8221;. Toda a página que for buscada no servidor deve trafegar pelo protocolo HTTP (Hypertext Transfer Protocol) que é o protocolo perfeito para transferência de HTML entre servidor e browser no cliente.</p>
<p>O interesse do browser por sua vez recai em interpretar estas tags, e classificar cada uma de acordo com sua serventia em um espaço reservado na memória do computador. Esta classificação se dá em estrutura de objetos. Nesta organização fica bem mais fácil de o browser &#8220;saber&#8221; o que é um botão, uma caixa de texto, saber dentro de quais tags estes componentes se encontram, monitorar seus eventos, renderizar os componentes na tela relacionando com CSS e tal.</p>
<p>Com o fim de que programadores WEB como nós pudéssemos acessar e manipular estes OBJETOS,  a netscape criou uma linguagem de script que por fim foi denominada Javascript (nossa amiga). Assim, no mesmo texto que provém do servidor e compõe o HTML podemos dar comandos Javascript para controlar os objetos criados a partir do HTML, e modificar a forma como estes são apresentados ou trabalhados. Vc já deve ter observado que Javascript não manipula as tags HTML como se fossem simples strings, mas objetos. Com propriedades, métodos e eventos.</p>
<p>Por exemplo, veja o HTML a seguir:</p>
<p>&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;div id=&#8221;coisa&#8221;&gt;&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>Supondo que se queira adicionar um texto qualquer dentro da div coisa utilizando Javascript, utilizaríamos a seguinte sintaxe:</p>
<p>&lt;script language=&#8221;javascript&#8221;&gt;<br />
var objeto_coisa = document.getElementById(&#8220;coisa&#8221;);<br />
objeto_coisa.innerHTML = &#8220;um texto qualquer&#8221;;<br />
&lt;/script&gt;</p>
<p><strong>Como isto funciona?</strong></p>
<p>Primeiramente o objeto correspondente a id coisa precisa ser instanciado para uma variável através de getElementById. A instância (cópia, referência) é colocada na variável objeto_coisa.  A partir desta variável podemos chamar métodos (funções) e propriedades (variáveis) do objeto. No caso apenas um texto foi lançado na propriedade innerHTML (Html interno) da tag referida pela variável objeto_coisa. Isto não modificou o HTML original colocando o texto no meio da tag. Mas modificou o objeto da div coisa que está na memória, e fez com que o browser apresentasse na tela o texto que foi atribuído para coisa.</p>
<p>Este teste pode ser reproduzido em sua máquina com a simples cópia dos 2 trechos de código anteriores,  e a seguir colando em um arquvo &#8220;.html&#8221; e testar, eu testei e funciona hehehe.</p>
<p><strong>E o PHP como funciona?</strong></p>
<p>Já o PHP é executado no lado servidor. Este geralmente é utilizado para criar ou complementar o HTML que é enviado do servidor para o BROWSER de forma dinâmica. E no caso do PHP, como sua única função é criar o HTML sem monitorar eventos, ele trata o HTML puramente como string. Ou seja, ao utilizar um echo, ele está apenas acrescentando algo que será enviado através do protocolo HTTP para o browser. E é isto. Ao digitar uma url como: http://pagina.com.br/lista.php no browser, este receberá apenas texto (seja HTML, Javascript, CSS&#8230;). Ninguém jamais viu código PHP no fonte de uma página, pois este apenas é interpretado no servidor, e se não houver echo nada virá do servidor para o browser.</p>
<p>Veja como ficaria o problema anterior resolvido com PHP:</p>
<p>&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;div id=&#8221;coisa&#8221;&gt;&lt;? echo &#8220;um texto qualquer&#8221;; ?&gt;&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>Se o código HTML + PHP acima fosse acessado pelo browser, a única coisa que este receberia constaria do HTML já preenchido pela tarefa em PHP que foi interpretada e executada pelo servidor, assim:</p>
<p>&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;div id=&#8221;coisa&#8221;&gt;um texto qualquer&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p><strong>Em resumo:</strong></p>
<p>Javascript:</p>
<p>1 &#8211; É interpretado e executado pelo browser, não pelo servidor.<br />
2 &#8211; Não trata o HTML como string, mas cada tag individualmente como um objeto que pode possuir métodos, propriedades (ou atributos) e eventos.</p>
<p>É recomendado para tratar de assuntos que não devam consultar o servidor, mas que possam ser executados diretamente no browser sem perda de tempo, e também no caso de tratamento de eventos (onclick por exemplo).</p>
<p>PHP</p>
<p>1 &#8211; É executado no servidor, e nada &#8220;sabe&#8221; do que está acontecendo no browser. Somente responde quando o usuário solicitar através de links, botões, ou códigos AJAX que efetuem chamadas para tarefas no servidor.<br />
2 &#8211; Trata o HTML puramente como string (texto).</p>
<p>É recomendado para fazer tarefas como buscar dados em banco de dados e complementar ou gerar HTML encima destes dados, ou para diversas outras tarefas que possam ser melhor tratadas no servidor.</p>
<p>É preciso ter em mente também que, quando um usuário solicitar algo do servidor uma conexão do browser com o servidor será estabelecida, e assim que o browser receber todo o HTML referente a esta página, a conexão é desfeita. Por isso não há como o servidor saber o que o usuário está fazendo com a página que recebeu. Pois o servidor apenas recebe ordens do browser, não podendo fazer nada além do solicitado pelo usuário. O Javascrript tem contribuído para o enriquecimento das aplicações web, por que pode ficar o tempo todo executando rotinas no browser e estar por dentro do que o usuário está fazendo. Então o programador da página pode fazer com que uma função detecte as necessidades do usuário e faça requisições ao servidor em momentos diferentes dos tradicionais, e mais, pode fazer isto escondido sem recarregar toda a página.   Aí entra o AJAX, que pode fazer uma solicitação para o servidor digamos por debaixo dos panos (sem que o usuário tenha clicado nos tradicionais botões ou links). Mas uma tarefa pode ser escrita em Javascript para por exemplo monitorar objetos que estejam sendo arrastados na tela (Drag and Drop) e a medida que isto aconteça enviar ou buscar informações no servidor via AJAX.</p>
<p>É isto&#8230; ahhh e se ainda não entende AJAX leia o post &#8220;Desmistificando o Temível Ajax&#8221;</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ahaprogramando.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ahaprogramando.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=13&subd=ahaprogramando&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/04/05/php-ou-javascript-qual-a-diferenca/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>
	</item>
		<item>
		<title>Como funciona a bilblioteca JAVASCRIPT DOJO?</title>
		<link>http://ahaprogramando.wordpress.com/2008/02/04/como-funciona-a-bilblioteca-javascript-dojo/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/02/04/como-funciona-a-bilblioteca-javascript-dojo/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 19:30:16 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[DOJO]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[biblioteca Javascript]]></category>
		<category><![CDATA[DHTML]]></category>
		<category><![CDATA[DOJO toolkit]]></category>
		<category><![CDATA[interface em Javascript]]></category>
		<category><![CDATA[tab Container]]></category>
		<category><![CDATA[WIDGET]]></category>
		<category><![CDATA[WIDGET DOJO]]></category>
		<category><![CDATA[WIDGETS DOJO]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=9</guid>
		<description><![CDATA[Graças a Deus pela criatividade dos Web Designers programadores neste mundo! E principalmente por aqueles que criam códigos reutilizáveis e os compartilham gratuitamente. É o caso da biblioteca Javascript DOJO que vem com uma montanha de utilitários (widgets) para que os web designers criativos não precisem gastar dias ou meses programando para adicionar funcionalidades Javascript [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=9&subd=ahaprogramando&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Graças a Deus pela criatividade dos Web Designers programadores neste mundo! E principalmente por aqueles que criam códigos reutilizáveis e os compartilham gratuitamente. É o caso da biblioteca Javascript DOJO que vem com uma montanha de <strong>utilitários (widgets)</strong> para que os web designers criativos não precisem gastar dias ou meses programando para adicionar funcionalidades Javascript nos seus projetos WEB. Não vou usar minha capacidade de ignorância para transmitir a idéia de que exista apenas o DOJO com esta finalidade, sei que paralelamente estão em atividade as bibliotecas MochiKit, YUI, JQuery,  EXT, GWT&#8230; Porém apenas posso comentar e dizer que é boa aquela que conheço e utilizo <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  .</p>
<p><strong>Legal&#8230; mas o que o dojo faz?</strong></p>
<p>Como dito anteriormente o dojo traz um cargamaço de <strong>widget</strong>&#8217;s (utilitários de interface) e funcionalidades que podem ser facilmente adicionados às páginas HTML. O melhor de tudo, com uma dúzia de linhas de código Javascript você pode instalar um <strong>widget</strong> à página, com um código limpo, nada de misturanga de scripts e HTML.  A figura abaixo mostra um exemplo de <strong>widget</strong> que gera um quadro que pode ter o conteúdo dividido por Abas. Uma boa parte destes recursos são úteis em ferramentas da área administrativa, ou para a implementação de WEB services.</p>
<p><a title="Exemplo de WIDGET DOJO com Abas" href="http://ahaprogramando.files.wordpress.com/2008/02/dojo1.png"><img src="http://ahaprogramando.files.wordpress.com/2008/02/dojo1.png" alt="Exemplo de WIDGET DOJO com Abas" /></a></p>
<p><strong><br />
</strong>No que tange a funcionalidades, tenho utilizado o serviço de ajax do DOJO, que funciona muito bem e é compatível com os browsers que aceitam objetos xmlHttpRequest. Em outra oportunidade poderemos ver como utilizá-lo, particularmente achei muito prático poder enviar dados via POST com o ajax do dojo. Se você ainda não conhece AJAX e seus benefícios visite nesta página o link: <a href="http://ahaprogramando.wordpress.com/2008/01/27/desmistificando-o-temivel-ajax/">Desmistificando o temível AJAX!</a><strong>.</strong></p>
<p><strong>Usar o DOJO requer:<br />
</strong><br />
Download da biblioteca, existem várias opções  em <a title="Página de download da biblioteca dojo" href="http://dojotoolkit.org/downloads" target="_blank">http://dojotoolkit.org/downloads</a></p>
<p>As principais são a versão compacta, e a versão com os fontes (src). Sempre opto pela opção src, assim posso dar uma olhada nos fontes quando tenho dúvidas. Mas na hora de colocar no servidor, aí é claro que convém utilizar a versão compacta. Localize a última versão  em:</p>
<p>downloads &gt; All downloads &gt; Download latest Stable Release (1.2.3) &gt;</p>
<p>dojo-release-1.2.3-src.zip  [versão com fontes]</p>
<p>dojo-release-1.2.3.zip [versão sem fontes]</p>
<p>Nos exemplos acima considerei a versão 1.2.3, quando for atualizado óbviamente constará diferente disso.</p>
<p>A biblioteca pode ser descompactada em qualquer diretório do computador. Para quem já tem servidor instalado na máquina, recomendo extrair para htdocs ou www.</p>
<p>Uma vez &#8220;downloadeado&#8221;, pode-se acessar diretamente nas pastas os diversos testes de exemplo que estão previamente preparados para experimentos iniciais de quem pretende utilizar a biblioteca. Tais exemplos estão dispostos em arquivos HTML e distribuídos em uma série de diretórios dentro da pasta principal que contém os arquivos do dojo, quando de-zipada. A maneira mais prática de encontrá-los é através de uma pesquisa pelo sistema de arquivos, solicitando apenas aqueles com extensão &#8220;.html&#8221;, e com nome iniciado por &#8220;test_&#8221;. Veja na <strong>figura 2</strong> um exemplo de pesquisa executada no windows vista que retornou os arquivos desejados. No resultado desta pesquisa bastaria um clique duplo sobre o arquivo test_Calendar.html para abrir no browser o exemplo de uma interface de calendário muito amigável gerada pelo DOJO.</p>
<p><img src="http://ahaprogramando.files.wordpress.com/2008/02/dojo2.jpg" alt="Figura 2" /></p>
<p>Estes exemplos não somente proporcionam uma clara visão do resultado como permitem que o usuário abra o código fonte para entender a estrutura HTML e Javascript da interface.</p>
<p><strong>Na prática&#8230; ô parte boa!</strong></p>
<p>Para nosso estudo de um widget vou escolher o arquivo de exemplo &#8220;test_Tooltip.html&#8221;. Tooltip é o utilitário usado para criar aqueles balões estilosos que descrevem algum objeto presente na página.  Na <strong>figura 3 </strong>é mostrado um  tooltip em ação que traz comentários sobre a caixa de texto #1. Infelizmente a seta do mouse não foi capturada no printscreen, mas ela estava posicionada sobre a caixa de texto à esquerda do balão.<br />
<img src="http://ahaprogramando.files.wordpress.com/2008/02/tooltip.gif" alt="figura 3" /></p>
<p>Examinando detalhadamente o arquivo &#8220;test_Tooltip.html&#8221; vamos encontrar no cabeçalho o seguinte script:</p>
<p><span style="color:#0000ff;"><span style="color:#ff0000;"><span style="color:#993300;">&lt;script type=&#8221;</span></span>text/javascript<span style="color:#993300;">&#8221; </span><span style="color:#993300;">src=&#8221;</span>../../dojo/dojo.js<span style="color:#993300;">&#8220;</span><br />
<span style="color:#993300;">djConfig=&#8221;</span>parseOnLoad: true, isDebug: false<span style="color:#993300;">&#8220;&gt;&lt;/script&gt;</span><br />
<span style="color:#993300;">&lt;script type=&#8221;</span>text/javascript<span style="color:#993300;">&#8221; src=&#8221;</span>_testCommon.js<span style="color:#993300;">&#8220;&gt;&lt;/script&gt;</span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;">&lt;script type=&#8221;</span>text/javascript<span style="color:#993300;">&#8220;&gt;</span><br />
<span style="color:#000000;"> dojo.require</span>(&#8220;dijit.Tooltip&#8221;);<br />
<span style="color:#000000;">dojo.require</span>(&#8220;dojo.parser&#8221;);<span style="color:#808080;">// find widgets</span></span></p>
<p><span style="color:#0000ff;"><span style="color:#000000;">dojo.addOnLoad</span><strong>(</strong><span style="color:#000000;"><strong>function</strong></span><strong>(){</strong><br />
<span style="color:#000000;">console.log</span><strong>(</strong>&#8220;on load func&#8221;<strong>)</strong>;<br />
<strong>var</strong> <span style="color:#000000;">tt</span> =<strong> new</strong> dijit.Tooltip<strong>({</strong>label:&#8221;programmatically created tooltip&#8221;,<br />
connectId:["programmaticTest"]<strong>})</strong>;<br />
<span style="color:#000000;"><strong>console.log</strong></span><strong>(</strong>&#8220;created&#8221;, tt, tt.id<strong>)</strong>;<br />
<strong>})</strong>;<br />
<span style="color:#993300;">&lt;/script&gt;</span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;"><strong>Passo a passo:</strong></span></span></span></p>
<p><span style="color:#0000ff;"><span style="color:#ff0000;"><span style="color:#993300;">&lt;script type=&#8221;</span></span>text/javascript<span style="color:#993300;">&#8221; </span><span style="color:#993300;">src=&#8221;</span>../../dojo/dojo.js<span style="color:#993300;">&#8220;<span style="color:#000000;"><span style="color:#993300;"> </span></span></span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;">Inicia pela referência ao arquivo que é o núcleo da referida biblioteca. Se dojo.js não for encontrado, os widgets não irão funcionar.</span></span></span></p>
<p><span style="color:#0000ff;"> <span style="color:#993300;">djConfig=&#8221;</span>parseOnLoad: true, isDebug: false<span style="color:#993300;">&#8220;&gt;&lt;/script&gt;</span></span><br />
<span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;"><span style="color:#993300;"><br />
<span style="color:#000000;">O atributo </span></span></span></span></span><span style="color:#000000;">djConfig recebe</span><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;"><span style="color:#993300;"><span style="color:#000000;"><span style="color:#993300;"> c</span>onfigurações de comportamento que definem como o dojo vai interpretar este arquivo. O primeiro parâmetro<strong> parseOnLoad</strong> que é setado como true, informa que o dojo precisa &#8220;farejar&#8221; o HTML em busca de widgets. Ou seja, quando a página for carregada o dojo irá varrer todo o HTML da página, e identificar quais tags lhe pertencem, quais são as que contém widgets dojo. As tags identificadas precisam ser trabalhadas dinamicamente para que o comportamento delas se altere segundo as definições para o widget nela contido. O segundo parâmetro <strong>isDebug, </strong>se for setado como true irá acrescentar um console de erros a página para identificar possíveis problemas com os widgets. Este console é precioso para quem estiver trabalhando com Internet Explorer, pois até a versão 7 do IE as informações sobre erros de Javascript são bastante incompletas. Antes de publicar a página não esqueça de desativar o console do dojo (<span style="color:#0000ff;">isDebug:false<span style="color:#000000;">), para evitar que ele fique aparecendo inconvenientemente ao público geral.</span></span></span><br />
</span></span></span></span></p>
<p><span style="color:#0000ff;"><br />
<span style="color:#993300;">&lt;script type=&#8221;</span>text/javascript<span style="color:#993300;">&#8221; src=&#8221;</span>_testCommon.js<span style="color:#993300;">&#8220;&gt;&lt;/script&gt;<br />
<span style="color:#000000;">Aqui trata-se de um script específico para o teste do tooltip.</span> </span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;">&lt;script type=&#8221;</span>text/javascript<span style="color:#993300;">&#8220;&gt;</span><br />
<span style="color:#000000;"> dojo.require</span>(&#8220;dijit.Tooltip&#8221;);<br />
</span><span style="color:#0000ff;"><span style="color:#000000;">dojo.require</span>(&#8220;dojo.parser&#8221;);<span style="color:#808080;">// find widgets</span></span></p>
<p>Carregamento dinâmico das ferramentas da biblioteca: de fato apenas dojo.js é essencial em todas as tarefas baseadas nesta biblioteca. As demais podem ser carregadas dinamicamente de acordo com a necessidade através de dojo.require. Isto colabora com a leveza do carregamento da página toda. Assim, no caso acima estão sendo invocadas as ferramentas para tooltip, e o parser, que é o farejador de widgets no meio do HTML. Nas linhas anteriores, em <span style="color:#0000ff;"><span style="color:#993300;">djConfig=&#8221;</span>parseOnLoad: true <span style="color:#000000;">foi configurado para que o parser atue quando a página for carregada, agora a ferramenta parser está sendo carregada através de require. Se não for carregada os widgets não funcionam (não será possível encontrar os coelhos na toca sem o cão farejador).</span></span></p>
<p>Até aqui foram vistos carregamentos de ferramentas básicas e suas configurações, agora começa um pouco de ação:</p>
<p><span style="color:#0000ff;"><span style="color:#000000;">dojo.addOnLoad</span><strong>(</strong><span style="color:#000000;"><strong>function</strong></span><strong>(){</strong><br />
<span style="color:#000000;">console.log</span><strong>(</strong>&#8220;on load func&#8221;<strong>)</strong>;<br />
</span><span style="color:#0000ff;"> </span><span style="color:#0000ff;"><strong>var</strong> <span style="color:#000000;">tt</span> =<strong> new</strong> dijit.Tooltip<strong>({</strong>label:&#8221;programmatically created tooltip&#8221;,<br />
</span><span style="color:#0000ff;"> </span><span style="color:#0000ff;"> connectId:["programmaticTest"]<strong>})</strong>;<br />
</span><span style="color:#0000ff;"> </span><span style="color:#0000ff;"><span style="color:#000000;"><strong>console.log</strong></span><strong>(</strong>&#8220;created&#8221;, tt, tt.id<strong>)</strong>;<br />
<strong>})</strong>;<br />
<span style="color:#993300;">&lt;/script&gt;</span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;">Acima é criada uma função javascript, que será executada quando a página estiver toda carregada. Esta função cria dinamicamente um tooltip e informa no console se a criação foi bem sucedida. O mais interessante de tudo aqui, é a ferramenta <strong>dojo.addOnLoad</strong>.  Com ela pode-se criar qualquer função dentro de addOnLoad que precise ser executada quando a página for carregada.  Experimente algo assim:</span></span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;">dojo.addOnLoad<strong><span style="color:#0000ff;">(</span>function<span style="color:#0000ff;">(){</span></strong> alert<span style="color:#0000ff;"><strong>(</strong></span><span style="color:#ff0000;">&#8220;oii&#8221;</span><strong><span style="color:#0000ff;">)</span></strong>; <strong><span style="color:#0000ff;">})</span></strong>;</span></span></span></p>
<p>Isto faria que<span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;"> <strong>alert</strong><span style="color:#0000ff;"><strong>(</strong></span><span style="color:#ff0000;">&#8220;oii&#8221;</span><strong><span style="color:#0000ff;">) </span></strong><span style="color:#000000;">fosse executado assim que a página terminasse de ser carregada.</span></span></span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;"><span style="color:#000000;"><strong>Agora o HTML dos WIDGET&#8217;S</strong>:</span></span></span></span></p>
<p><span style="color:#0000ff;"><span style="color:#993300;"><span style="color:#000000;"><span style="color:#000000;"><span style="color:#0000ff;">&lt;input type=&#8221;input&#8221; id=&#8221;id1&#8243; value=&#8221;#1&#8243;&gt;<br />
&lt;span dojoType=&#8221;dijit.Tooltip&#8221; connectId=&#8221;id1&#8243;&gt;<span style="color:#000000;">tooltip para a caixa 1</span>&lt;/span&gt;<br />
</span></span></span></span></span><br />
A primeira tag &#8220;&lt;input&#8230;&#8221; é uma tag normal que, por exemplo, pode ser a entrada de dados para um formulário, observe que esta input é identificada pelo <strong>id</strong> &#8220;id1&#8243;.  Logo abaixo a tag &#8220;&lt;span&#8221; também é uma tag normal html, porém neste caso foi acrescido a ela o atributo dojType, este atributo indica que esta tag contém um widget dojo. Assim quando o parser encontrar esta tag detectará que trata-se de um widget dojo, e o dojo tomará as devidas providências para que este widget funcione. Basicamente este widget providencia o tooltip para a tag input. O texto contido na tag span (&#8220;tooltip para a caixa 1&#8243;) é o texto que irá aparecer dentro do balão tooltip, quando o mouse estiver sobre a caixa de texto <strong>id1. </strong>Por que as duas tags estão ligadas pela referência no atributo <strong>connectId</strong> da tag span.<strong> </strong>É importante perceber que aqui, no meio do html não foi requerido nenhum script especial, pois o dojo já efetua todas as tarefas de montagem quando a página for carregada, e depois fica aguardando apenas que os eventos (click, mouseover&#8230;) aconteçam. Assim, se fossem atribuídos 10 tooltip&#8217;s para outras 10 tag&#8217;s input, nenhuma nova linha de javascript seria requerida para isto.</p>
<p>Bom, por hoje é só.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ahaprogramando.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ahaprogramando.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=9&subd=ahaprogramando&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/02/04/como-funciona-a-bilblioteca-javascript-dojo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2008/02/dojo1.png" medium="image">
			<media:title type="html">Exemplo de WIDGET DOJO com Abas</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2008/02/dojo2.jpg" medium="image">
			<media:title type="html">Figura 2</media:title>
		</media:content>

		<media:content url="http://ahaprogramando.files.wordpress.com/2008/02/tooltip.gif" medium="image">
			<media:title type="html">figura 3</media:title>
		</media:content>
	</item>
		<item>
		<title>Desmistificando o temível AJAX!</title>
		<link>http://ahaprogramando.wordpress.com/2008/01/27/desmistificando-o-temivel-ajax/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/01/27/desmistificando-o-temivel-ajax/#comments</comments>
		<pubDate>Sun, 27 Jan 2008 20:40:03 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[assíncrono]]></category>
		<category><![CDATA[DHTML]]></category>
		<category><![CDATA[innerHTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[XMLHttpRequest]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/?p=7</guid>
		<description><![CDATA[O termo AJAX não provém do latim &#8220;Acessarium Javascriptum Atloren Xmelum&#8221;, não, mas da expressão da língua inglesa &#8220;Asynchronous JavaScript And XML&#8221; ou Javascript e XML assíncronos.
Um parêntesis teórico:
Esta questão de atividade assíncrona está para Javascript assim com THREAD&#8217;S estão para JAVA. Ou seja, a execução assíncrona ocorre em um tempo diferente da execução do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=7&subd=ahaprogramando&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>O termo AJAX não provém do latim &#8220;Acessarium Javascriptum Atloren Xmelum&#8221;, não, mas da expressão da língua inglesa &#8220;Asynchronous JavaScript And XML&#8221; ou Javascript e XML assíncronos.</p>
<p><strong>Um parêntesis teórico:</strong></p>
<p>Esta questão de atividade assíncrona está para Javascript assim com THREAD&#8217;S estão para JAVA. Ou seja, a execução assíncrona ocorre em um tempo diferente da execução do script original. De modo que, se no meio de um looping for chamada a execução de uma tarefa assíncrona, o programa não irá aguardar a conclusão desta tarefa para então passar ao próximo passo do looping. Assim ao concluir a execução de um looping de 10 iterações, em que todas executam uma nova tarefa assíncrona, a nona tarefa pode estar sendo aberta e a primeira não ter sido concluída ainda, mas a terceira tarefa já pode ter retornado um resultado.</p>
<p><strong>O que realmente interessa, prática!<br />
</strong></p>
<p>Vamos partir de um layour HTML ultra básico:</p>
<p>&lt;div id=<span style="color:#0000ff;">&#8220;geral&#8221;</span>&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_menu&#8221;</span>&gt;&lt;/div&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_principal&#8221;</span>&gt;&lt;/div&gt;<br />
&lt;/div&gt;</p>
<p>Para incluir dados dinamicamente via PHP poderíamos proceder da maneira tradicional:</p>
<p>&lt;div id=<span style="color:#0000ff;">&#8220;geral&#8221;</span>&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_menu&#8221;</span>&gt;<br />
&lt;a href=<span style="color:#0000ff;">&#8220;index.php?arquivo=lista.php&#8221;</span>&gt;<br />
&lt;/div&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_principal&#8221;</span>&gt;<br />
<span style="color:#808080;">&lt;!&#8211; assim ao clicar no menu recarrega a página incluindo o arquivo que deve ser mostrado &#8211;&gt;</span><br />
<span style="color:#ff0000;">&lt;?php</span> include<span style="color:#0000ff;">(</span>$_GET<span style="color:#0000ff;">[</span><span style="color:#ff0000;">'arquivo'</span><span style="color:#0000ff;">])</span>; <span style="color:#ff0000;">?&gt;</span><br />
&lt;/div&gt;<br />
&lt;/div&gt;</p>
<p><strong>Tudo certo até aqui? </strong></p>
<p>Bom, existe uma maneira de se carregar um conteúdo para dentro da div &#8220;coluna_principal&#8221;, sem usar frames ou recarregar a página utilizando includes.</p>
<p>Trata-se da técnica entitulada de AJAX (Asynchronous JavaScript And XML). Serve basicamente para carregar dados (xml, html, texto) em uma página, abrindo um portal no &#8220;espaço tempo&#8221; do browser e indo buscar novo conteúdo no servidor, sem desfazer todo o HTML  que já tinha sido previamente carregado no browser, ao acessar a página.</p>
<p><strong>Um parêntesis de programação javascript:</strong></p>
<p>Em primeiro lugar, gostaria de explicar como funciona o atributo <strong>innerHTML</strong> do javascript. Atenção <strong>innerHTML</strong> não é AJAX. Serve apenas para alterar dinamicamente o HTML contido dentro de uma tag. É preciso ter em mente que o Javascript vê as tags do browser de uma maneira diferente do PHP. Em Javascript, todas as tags HTML podem ser referenciadas como um objeto (com métodos e atributos), ligado ao objeto principal <strong>document</strong>. Em PHP, porém, todas as tag&#8217;s são tratadas puramente como texto, basta fazer <strong>echo</strong> de alguma coisa no meio do html e tá realizado. Claro, isto por que o PHP faz a sua parte lá no servidor, e o servidor apenas tem interesse em fornecer TAG&#8217;s HTML, e não em interpretá-las. Já o Javascript, é  executado no browser, juntamente com o HTML. Logo, estando o HTML interpretado pelo browser, este HTML fica na memória do computador, e o browser não mais o enxerga como um texto, mas como objetos que tem propriedades e comportamentos. Por exemplo, um botão não pode ser visto como um texto, mas deve ser visto como um programa, um objeto que reage ao click do usuário. Continuando:</p>
<p><strong><span style="color:#0000ff;">var</span></strong> container <span style="color:#0000ff;">=</span> document.getElementById(<span style="color:#0000ff;">&#8216;coluna_principal&#8217;</span>);<br />
<span style="color:#808080;">//getElementById localiza um objeto no meio do html,<br />
//pelo seu ID, e retorna uma referência para este objeto.</span></p>
<p>Agora, a variável container se tornou um objeto com referência para a tag &#8220;coluna_principal&#8221;. E ele tem propriedades que podem ser acessadas a partir desta variável. Tipo, poderíamos descobrir que tag é esta:</p>
<p><span style="color:#666699;">alert</span><span style="color:#0000ff;">(</span>container.tagName<span style="color:#0000ff;">)</span>;<span style="color:#808080;"> //isto mostraria &#8220;div&#8221; , pois div é o nome da tag</span></p>
<p><span style="color:#808080;">//que é identificada pelo id &#8220;coluna_principal&#8221;.</span></p>
<p>Aqui é que entra o innerHTML.</p>
<p>container.innerHTML = <span style="color:#0000ff;">&#8220;&lt;br&gt; oi &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; bla bla bla&#8221;</span>;<br />
<span style="color:#808080;"><br />
//com isto o texto e o HTML entre aspas foram adicionados dentro da tag div com id &#8220;coluna_principal&#8221;.</span></p>
<p>Bom esta é a maneira de escrever um HTML novo dentro de uma tag já existente, de forma dinâmica (DHTML &#8211; Dynamic HTML).</p>
<p><strong>Então&#8230; como o Ajax funciona?</strong></p>
<p>Ajax nada mais é do que a técnica para carregar conteúdo no browser, que utiliza funções javascript para buscar dados de um arquivo presente no servidor. Esta tarefa é executada por um componente do browser (<em><span style="color:#0000ff;"><span style="color:#000000;">XMLHttpRequest</span></span></em>), que pode ser acessado através de funções Javascript para buscar no servidor um novo HTML ou XML.</p>
<p><span style="color:#ff0000;">&lt;script&gt;</span><br />
<span style="color:#808080;">//Tenta criar o objeto xmlhttp responsável por buscar os dados no servidor, são necessárias<br />
// 3 tentativas de criação do objeto por conta das discrepâncias de browsers microsoft</span><br />
<span style="color:#0000ff;"><strong>try {<br />
</strong><span style="color:#000000;">xmlhttp</span> =<strong> new</strong> <span style="color:#000000;">XMLHttpRequest</span>();<strong><br />
} catch(ee) {<br />
try{<br />
</strong><span style="color:#000000;">xmlhttp</span> = <strong>new</strong> <span style="color:#000000;">ActiveXObject</span>(&#8220;Msxml2.XMLHTTP&#8221;);<strong><br />
} catch(e) {<br />
try{<br />
</strong><span style="color:#000000;">xmlhttp</span> = <strong>new</strong> <span style="color:#000000;">ActiveXObject</span>(&#8220;Microsoft.XMLHTTP&#8221;);<strong><br />
} catch(E) {<br />
</strong><span style="color:#000000;">xmlhttp</span> = <strong>false</strong>;<strong><br />
}<br />
}<br />
}</strong><br />
</span><br />
<span style="color:#808080;"><br />
//a função de carregamento, recebe como parâmetro<br />
//_idConainer &#8211; id da tag onde será escrito o novo HTML que será buscado no servidor<br />
//_endereco &#8211; endereço da página que será buscada no servidor</span><br />
<strong>function</strong> carrega<span style="color:#000080;">(</span>_idContainer, _endereco<span style="color:#0000ff;">){ </span></p>
<p>xmlhttp.open<span style="color:#0000ff;">(&#8220;GET&#8221;</span>,_endereco,<span style="color:#0000ff;"><strong>true</strong>)</span>;<br />
xmlhttp.onreadystatechange=<strong>function</strong><span style="color:#0000ff;">() {</span></p>
<p><strong><span style="color:#0000ff;">if (</span></strong>xmlhttp.readyState==<span style="color:#ff0000;">4</span><span style="color:#0000ff;"><strong>){ </strong></span></p>
<p><span style="color:#808080;">//pega o resultado e filtra alguns caracteres absurdos</span><br />
retorno=xmlhttp.responseText;<br />
<span style="color:#808080;">//tag_container contem a referencia da tag que vai receber </span><br />
<strong><span style="color:#0000ff;">var</span></strong> tag_container = document.getElementById(_idContainer);<br />
<span style="color:#808080;">//escreve dentro da tag o novo HTML</span><br />
tag_container.innerHTML=retorno; <span style="color:#808080;">//olha o inner html aí</span></p>
<p><strong><span style="color:#0000ff;">}<br />
}</span></strong><br />
<span style="color:#808080;">//Executa</span><br />
xmlhttp.send(<strong>null</strong>)<br />
<strong><span style="color:#0000ff;">}</span></strong><br />
<span style="color:#ff0000;">&lt;/script&gt; </span></p>
<p>Pronto! Lembra daquele trecho básico de html?</p>
<p>&lt;div id=<span style="color:#0000ff;">&#8220;geral&#8221;</span>&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_menu&#8221;</span>&gt;&lt;/div&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_principal&#8221;</span>&gt;&lt;/div&gt;<br />
&lt;/div&gt;<br />
Para inserir um conteúdo HTML, no div de id &#8220;coluna_principal&#8221;, basta invocar a função carrega passando como parâmetro o id da div, e o endereço da página que contém os dados que devem ser carregados via AJAX. Ex:</p>
<p><span style="color:#0000ff;">&lt;script&gt;<br />
<span style="color:#000000;">carrega</span>(&#8216;coluna_principal&#8217;, &#8216;dados.php&#8217;);</span></p>
<p><span style="color:#0000ff;"><span style="color:#808080;">// ou se for o caso, a url completa:</span><br />
<span style="color:#000000;">carrega</span>(&#8216;coluna_principal&#8217;, &#8216;http://www.minhapagina.com/dados.php&#8217;);</span><br />
<span style="color:#ff0000;">&lt;/script&gt;<br />
</span></p>
<p>Quando <em>carrega</em> for chamado com os devidos parâmetros é que ocorre a tarefa de carregamento que se dá assincronamente, ou seja, não há como prever o tempo que levará para ela ser concluída, uma vez que este tempo depende de diversos fatores como: a velocidade da conexão de rede naquele momento, a quantidade de dados que serão carregados, a disponibilidade do servidor de atender etc&#8230;</p>
<p><strong>E como fazer para um link ativar o carregamento de uma página usando AJAX?</strong></p>
<p>&lt;div id=<span style="color:#0000ff;">&#8220;geral&#8221;</span>&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_menu&#8221;</span>&gt;&lt;a href=<span style="color:#0000ff;">&#8220;javascript:carrega(&#8216;coluna_principal&#8217;, &#8216;dados.php&#8217;);&#8221;</span>&gt;acessar dados&lt;/a&gt;&lt;/div&gt;<br />
&lt;div id=<span style="color:#0000ff;">&#8220;coluna_principal&#8221;</span>&gt;&lt;/div&gt;<br />
&lt;/div&gt;<br />
Bom, como podemos ver, AJAX nada mais é do que uma técnica de carregamento de dados. O exemplo acima funciona, porém por tratar-se de um código exemplar de extrema simplicidade, não pode ser utilizado para aplicações sérias. Nele faltam diversos recursos, que talvez em outra análise sobre AJAX possamos aprofundar.</p>
<p><span style="color:#ff0000;"><strong>[15/01/2009 - Edição problema grave no wordpress]  - Ao copiar trechos de código, dos posts do Ahã Programando, substitua todas as aspas redigitando-as. Pois o WordPress substitui as aspas originais por algumas que são inúteis em programação. E os testes acabam não funcionando, deixando os entusiastas da programação web frustrados.  <span style="color:#008000;">Não desista! Tente novamente <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </span></strong></span></p>
<p>Por hoje é só! E como prometido, quero dedicar este pequeno artigo à minha amiga Web Designer Cristina Otto, abração Cris!!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ahaprogramando.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ahaprogramando.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=7&subd=ahaprogramando&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/01/27/desmistificando-o-temivel-ajax/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>
	</item>
		<item>
		<title>Como passar valores do PHP para o Javascript e vice versa?</title>
		<link>http://ahaprogramando.wordpress.com/2008/01/19/6/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/01/19/6/#comments</comments>
		<pubDate>Sat, 19 Jan 2008 02:02:42 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[Programação Web]]></category>
		<category><![CDATA[passar valor]]></category>
		<category><![CDATA[passar valores]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[variáveis Javascript]]></category>
		<category><![CDATA[variáveis PHP]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/2008/01/19/6/</guid>
		<description><![CDATA[O que não pode ser ignorado no casamento de Javascript com PHP é que os dois estão rodando em extremos diferentes. Os scripts de Javascript com suas variáveis estão no browser, carregados juntamente com o HTML, e os scripts PHP terão executado suas tarefas do outro lado da WEB, lá no servidor. A unica via [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=6&subd=ahaprogramando&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>O que não pode ser ignorado no casamento de Javascript com PHP é que os dois estão rodando em extremos diferentes. Os scripts de Javascript com suas variáveis estão no browser, carregados juntamente com o HTML, e os scripts PHP terão executado suas tarefas do outro lado da WEB, lá no servidor. A unica via de comunicação entre eles são os textos (html, javascript&#8230;) que transitam no protocolo HTTP. Isto  um paradoxo, uma vez que você encontrará PHP, HTML e Javascript no mesmo arquivo index.php (por exemplo). Porém, como dito anteriormente, cada um, PHP e Javascript atua em um ambiente diferente.Vamos começar com a prática! &#8230; ou melhor&#8230;. um pouco mais de teoria:</p>
<p>Bom&#8230; não é possível fazer um <span style="color:#ff0000;">&lt;?</span> <span style="color:#0000ff;">echo</span>&#8230; <span style="color:#ff0000;">?&gt;</span> dentro de um arquivo &#8220;.js&#8221;, porque isto só funciona dentro de um arquivo .php. Mas é perfeitamente possível um <span style="color:#ff0000;">&lt;?</span> <span style="color:#0000ff;">echo</span>&#8230; <span style="color:#ff0000;">?&gt; </span>dentro de um arquivo &#8220;.php&#8221; da página (index.php por exemplo&#8230;) . Levemos em consideração que esta página também irá carregar arquivos &#8220;.js&#8221;. Aproveitando se desta aparente reunião, basta criar variáveis (javascript) globais, as quais podem ser denominadas &#8220;variáveis de ambiente&#8221;. Pois irão permitir o trânsito de informações do ambiente HTML+PHP para o âmbito do Javascript. Bla bla bla bla&#8230; esclarecimentos práticos por favor:</p>
<p><span style="color:#ff0000;">&lt;script&gt;</span><br />
<span style="color:#999999;">//para não criar muitas variáveis dispersas, é interessante criar um array de variáveis </span><br />
<strong><span style="color:#0000ff;">var </span></strong>VARS_AMBIENTE <span style="color:#0000ff;">=</span> <strong><span style="color:#0000ff;">new</span></strong> <span style="color:#808080;">Array</span><span style="color:#0000ff;">()</span>;<br />
<span style="color:#999999;">//em nosso exemplo vamos preencher a variável de ambiente &#8220;caminho_servidor&#8221;<br />
// a qual terá seu conteúdo fornecido por um echo PHP</span><br />
VARS_AMBIENTE[<span style="color:#0000ff;">'caminho_servidor'</span>] <span style="color:#0000ff;">=</span> <span style="color:#ff0000;">&lt;?</span> <span style="color:#0000ff;">echo</span> $caminho_server; <span style="color:#ff0000;">?&gt;</span>;<br />
<span style="color:#ff0000;">&lt;/script&gt;<br />
</span></p>
<p>É importante ter em mente que quando a página HTML + PHP for carregada no browser, o código acima será visto como:</p>
<p><span style="color:#ff0000;">&lt;script&gt;</span><br />
<strong><span style="color:#0000ff;">var </span></strong>VARS_AMBIENTE <span style="color:#0000ff;">=</span> <strong><span style="color:#0000ff;">new</span></strong> <span style="color:#808080;">Array</span><span style="color:#0000ff;">()</span>;<br />
VARS_AMBIENTE[<span style="color:#0000ff;">'caminho_servidor'</span>] <span style="color:#0000ff;">=</span> <span style="color:#0000ff;">&#8220;algum valor fornecido pelo echo do PHP lá no servidor&#8230;&#8221;</span>;<br />
<span style="color:#ff0000;">&lt;/script&gt;</span></p>
<p>Pois o PHP já terá feito seu trabalho no servidor quando a página for carregada no browser. E então o código do script que estiver no meio do HTML virá do servidor com a variável previamente preenchida.</p>
<p>Continuando a página index.php&#8230; agora basta carregar o script que deve ter alguma referência a VARS_AMBIENTE['caminho_servidor'] para receber o valor contido nesta variável:</p>
<p><span style="color:#ff0000;">&lt;script src=</span><span style="color:#0000ff;">&#8220;meuscript.js&#8221;</span><span style="color:#ff0000;">&gt;&lt;/script&gt;</span></p>
<p>Pronto! Qualquer código contido dentro de meuscript.js que faça referência a VARS_AMBIENTE['caminho_servidor'] terá acesso ao camino do servidor.</p>
<p><strong>E o caminho inverso?</strong></p>
<p>Já do javascript para o PHP, como cada um estará sendo interpretado em uma ponta diferente da web (Javascript &#8211; cliente / PHP &#8211; servidor), a única forma de enviar dados continua sendo através de tráfego pela rede. Nesta hora uma tag &#8220;mágica&#8221; pode ajudar:</p>
<p><span style="color:#ff9900;">&lt;form &#8230;&gt; </span></p>
<p><span style="color:#ff9900;">&lt;input type=<span style="color:#0000ff;">&#8220;hidden&#8221;</span> id=<span style="color:#0000ff;">&#8220;dados&#8221;</span> name=<span style="color:#0000ff;">&#8220;dados_enviar&#8221;</span> value=<span style="color:#0000ff;">&#8220;&#8221;</span> /&gt;</span></p>
<p><span style="color:#ff9900;">&lt;/form&gt; </span></p>
<p><span style="color:#999999;">&lt;!&#8211; Observe que na tag input acima o atributo value foi deixado em branco. Naturalmente se nenhum dado for setado para este atributo, nenhuma informação será recebido no servidor ao executar submit deste formulário.&#8211;&gt;</span></p>
<p><span style="color:#ff0000;">&lt;script&gt;</span></p>
<p><span style="color:#808080;">//aqui a input hidden de id=&#8221;dados&#8221; recebe um valor dinâmicamente<br />
//via código Javascript:</span><br />
<span style="color:#808080;"><br />
</span><span style="color:#808080;">//cria um objeto de referência à tag input hidden</span><br />
<span style="color:#0000ff;"><strong>var</strong></span> objetoDados =  document.getElementById<span style="color:#0000ff;"><strong>(</strong>&#8220;dados&#8221;<strong>);<br />
</strong><span style="color:#808080;">//altera o atributo value desta tag</span></span><br />
objetoDados<span style="color:#0000ff;"><strong></strong>.</span>value <span style="color:#0000ff;">=</span> <span style="color:#0000ff;">&#8220;dados que vão para o servidor&#8221;</span>;<br />
<span style="color:#ff0000;">&lt;/script&gt;</span></p>
<p class="MsoNormal">No momento em que estes dados forem &#8220;submitados&#8221;, poderão ser adquiridos no servidor através de um script PHP que os capture via post por exemplo:<br />
<span style="color:#ff0000;">&lt;?</span></p>
<p><span style="color:#0000ff;">echo</span> $_POST[ <span style="color:#ff0000;">'</span><span style="color:#ff0000;">dados_enviar</span><span style="color:#ff0000;">'</span>];</p>
<p><span style="color:#ff0000;">?&gt;</span></p>
<p>É isto!</p>
<p>Veja também:</p>
<p><a href="http://ahaprogramando.wordpress.com/2008/11/29/passar-array-de-php-para-javascript-e-de-javascript-para-php/">Passar array de PHP para Javascript, e de Javascript para PHP</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ahaprogramando.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ahaprogramando.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=6&subd=ahaprogramando&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/01/19/6/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>
	</item>
		<item>
		<title>Importe os arquivos CSS com classe!</title>
		<link>http://ahaprogramando.wordpress.com/2008/01/18/importe-os-arquivos-css-com-classe/</link>
		<comments>http://ahaprogramando.wordpress.com/2008/01/18/importe-os-arquivos-css-com-classe/#comments</comments>
		<pubDate>Fri, 18 Jan 2008 20:51:12 +0000</pubDate>
		<dc:creator>Leonir Zimmermann</dc:creator>
				<category><![CDATA[Layout CSS]]></category>
		<category><![CDATA[Programação Web]]></category>

		<guid isPermaLink="false">http://ahaprogramando.wordpress.com/2008/01/18/importe-os-arquivos-css-com-classe/</guid>
		<description><![CDATA[A primeira dica é na área de CSS. Para atachar ao site arquivos de CSS externos, geralmente utilizamos a sintaxe do padrão HTML4 a seguir :
&#60;link type=&#8221;text/css&#8221; rel=&#8221;stylesheet&#8221; href=&#8221;arquivo1.css&#8221; mce_href=&#8221;arquivo1.css&#8221;&#62;
&#60;link type=&#8221;text/css&#8221; rel=&#8221;stylesheet&#8221; href=&#8221;arquivo2.css&#8221; mce_href=&#8221;arquivo2.css&#8221;&#62;
&#60;link type=&#8221;text/css&#8221; rel=&#8221;stylesheet&#8221; href=&#8221;arquivo3.css&#8221; mce_href=&#8221;arquivo3.css&#8221;&#62;
&#60;link type=&#8221;text/css&#8221; rel=&#8221;stylesheet&#8221; href=&#8221;arquivo4.css&#8221; mce_href=&#8221;arquivo4.css&#8221;&#62;
Se forem necessários diversos arquivos, repetidas vezes esta linha deve constar em meio ao [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=4&subd=ahaprogramando&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A primeira dica é na área de CSS. Para atachar ao site arquivos de CSS externos, geralmente utilizamos a sintaxe do padrão HTML4 a seguir :</p>
<p>&lt;link type=&#8221;text/css&#8221; rel=&#8221;stylesheet&#8221; href=&#8221;arquivo1.css&#8221; mce_href=&#8221;arquivo1.css&#8221;&gt;<br />
&lt;link type=&#8221;text/css&#8221; rel=&#8221;stylesheet&#8221; href=&#8221;arquivo2.css&#8221; mce_href=&#8221;arquivo2.css&#8221;&gt;<br />
&lt;link type=&#8221;text/css&#8221; rel=&#8221;stylesheet&#8221; href=&#8221;arquivo3.css&#8221; mce_href=&#8221;arquivo3.css&#8221;&gt;<br />
&lt;link type=&#8221;text/css&#8221; rel=&#8221;stylesheet&#8221; href=&#8221;arquivo4.css&#8221; mce_href=&#8221;arquivo4.css&#8221;&gt;</p>
<p>Se forem necessários diversos arquivos, repetidas vezes esta linha deve constar em meio ao HTML. Mas existe uma maneira mais &#8221;clean&#8221; de se fazer isto:</p>
<p>&lt;style type=&#8221;text/css&#8221;&gt;<br />
  @import url(&#8220;arquivo1.css&#8221;);<br />
  @import url(&#8220;arquivo2.css&#8221;);<br />
  @import url(&#8220;arquivo3.css&#8221;);<br />
  @import url(&#8220;arquivo4.css&#8221;);<br />
&lt;/style&gt;</p>
<p>Vi alguns exemplos trabalhando desta forma, e investigando a compatibilidade, descobri que dá pra usar livre e tranquilamente, veja a tabela a seguir que mostra a compatibilidade do recurso com diversos browsers:</p>
<p><a target="_blank" href="http://imfo.ru/csstest/css_hacks/import.php">http://imfo.ru/csstest/css_hacks/import.php</a></p>
<p>É isto.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ahaprogramando.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ahaprogramando.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ahaprogramando.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ahaprogramando.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ahaprogramando.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ahaprogramando.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ahaprogramando.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ahaprogramando.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ahaprogramando.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ahaprogramando.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ahaprogramando.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ahaprogramando.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ahaprogramando.wordpress.com&blog=2555891&post=4&subd=ahaprogramando&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ahaprogramando.wordpress.com/2008/01/18/importe-os-arquivos-css-com-classe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/77a39a67e50eb958537711aaaa6f0e65?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">leonirz</media:title>
		</media:content>
	</item>
	</channel>
</rss>