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

<channel>
	<title>GUJS - Grupo de Usuários Javascript &#187; Tutoriais Básicos</title>
	<atom:link href="http://gujs.com.br/blog/categoria/tutoriais-basicos/feed/" rel="self" type="application/rss+xml" />
	<link>http://gujs.com.br/blog</link>
	<description>O Maior Site Javascript do Brasil</description>
	<lastBuildDate>Tue, 27 Oct 2009 14:12:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Compactação JavaScript</title>
		<link>http://gujs.com.br/blog/2007/04/compactacao-javascript/</link>
		<comments>http://gujs.com.br/blog/2007/04/compactacao-javascript/#comments</comments>
		<pubDate>Mon, 30 Apr 2007 03:40:11 +0000</pubDate>
		<dc:creator>Rafael Quines</dc:creator>
				<category><![CDATA[Frameworks e APIs]]></category>
		<category><![CDATA[Tutoriais Básicos]]></category>
		<category><![CDATA[Técnicas]]></category>

		<guid isPermaLink="false">http://gujs.com.br/blog/2007/04/compactacao-javascript/</guid>
		<description><![CDATA[Compactação javascript consiste na otimização de código, a fim de diminuir ao máximo o tamanho dos arquivos que o browser deverá fazer o download na hora que um usuário acessa um determinado site. Além de deixar uma página muito mais leve e rápida, os arquivos compactados ocuparão menos espaço no servidor também. Como JavaScript é [...]]]></description>
			<content:encoded><![CDATA[<p>Compactação javascript consiste na otimização de código, a fim de diminuir ao máximo o tamanho dos arquivos que o browser deverá fazer o download na hora que um usuário acessa um determinado site. Além de deixar uma página muito mais leve e rápida, os arquivos compactados ocuparão menos espaço no servidor também. Como JavaScript é uma linguagem interpretada, o que os compactadores fazem é aplicar técnicas específicas como nome de variáveis com poucos caracteres, tirar espaços desnecessários, comentários, etc.<br />
<span id="more-21"></span><br />
Um método simples de compactação é feito com o <a href="http://www.crockford.com/javascript/jsmin.html">JSMIN</a>. O que ele faz é simplesmente tirar comentários e espaços em branco desnecessários. Segue uma demonstração da compactação feita pelo JSMIN:</p>
<pre class="prettyprint">
&lt;script type="text/javascript"&gt;
//TAMANHO: 932 bytes

// The -is- object is used to identify the browser.  Every browser edition
// identifies itself, but there is no standard way of doing it, and some of
// the identification is deceptive. This is because the authors of web
// browsers are liars. For example, Microsoft's IE browsers claim to be
// Mozilla 4. Netscape 6 claims to be version 5.

var is = {
    ie:      navigator.appName == 'Microsoft Internet Explorer',
    java:    navigator.javaEnabled(),
    ns:      navigator.appName == 'Netscape',
    ua:      navigator.userAgent.toLowerCase(),
    version: parseFloat(navigator.appVersion.substr(21)) ||
             parseFloat(navigator.appVersion),
    win:     navigator.platform == 'Win32'
}
is.mac = is.ua.indexOf('mac') >= 0;
if (is.ua.indexOf('opera') >= 0) {
    is.ie = is.ns = false;
    is.opera = true;
}
if (is.ua.indexOf('gecko') >= 0) {
    is.ie = is.ns = false;
    is.gecko = true;
}
&lt;/script&gt;
</pre>
<p>ficaria:</p>
<pre class="prettyprint">
&lt;script type="text/javascript"&gt;
// TAMANHO: 440 bytes
var is={ie:navigator.appName=='Microsoft Internet Explorer',java:navigator.javaEnabled(),ns:navigator.appName=='Netscape',ua:navigator.userAgent.toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion),win:navigator.platform=='Win32'}
is.mac=is.ua.indexOf('mac')>=0;if(is.ua.indexOf('opera')>=0){is.ie=is.ns=false;is.opera=true;}
if(is.ua.indexOf('gecko')>=0){is.ie=is.ns=false;is.gecko=true;}
&lt;/script&gt;
</pre>
<p>Como podem ver, apenas uma lógica simples já diminuiu em pouco mais de 50%. Esse é objetivo do JSMIN. Mas ainda existe uma outra maneira de compactar mais ainda seu código.</p>
<p>Essa <a href="http://joliclic.free.fr/php/javascript-packer/en/index.php">outra técnica</a> consiste em pegar as palavras usadas repetidas, como &#8220;function&#8221;, &#8220;var&#8221;, &#8220;alert&#8221;, e usar em seu lugar, uma variável de nome pequeno, como a, b, c. Depois, é feito um eval desse resultado que, via expressão regulares, irão substituir os a, b, c por seus nomes originais como &#8220;function&#8221;, &#8220;var&#8221;, &#8220;alert&#8221;, etc. Para pequenos códigos, essa técnina não faz muita diferença, mas para grandes códigos é muito mais eficiente. O mesmo código do exemplo anterior compactado ficaria:</p>
<pre class="prettyprint">
&lt;script type="text/javascript"&gt;
eval(function(p,a,c,k,e,d){while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c])}}return p}('j 1={5:2.7==\'m k i\',g:2.h(),6:2.7==\'l\',3:2.u.s(),t:9(2.b.r(q))||9(2.b),n:2.o==\'p\'}1.a=1.3.4(\'a\')>=0;d(1.3.4(\'c\')>=0){1.5=1.6=e;1.c=8}d(1.3.4(\'f\')>=0){1.5=1.6=e;1.f=8}',31,31,'|is|navigator|ua|indexOf|ie|ns|appName|true|parseFloat|mac|appVersion|opera|if|false|gecko|java|javaEnabled|Explorer|var|Internet|Netscape|Microsoft|win|platform|Win32|21|substr|toLowerCase|version|userAgent'.split('|')))
&lt;/script&gt;
</pre>
<p>Neste caso ficou com 529 bytes. Mas experimente pegar grandes arquivos e passar essa compactação. Uso o framework <a href="http://gujs.com.br/blog/2007/04/mootools-otimo-framework-javascript/">MooTools</a> e baixei uma versão compactada, e outra normal. A versão normal tem 140kb, já a compactada ficou com 49kb. Muita diferença neh. Só não esqueça de ao usar essas compactações javascript, sempre guarde a versão original do arquivo, pois muitas vezes o código fica ilegível. Não é a toa que os compactadores são chamados também de ofuscadores.</p>
]]></content:encoded>
			<wfw:commentRss>http://gujs.com.br/blog/2007/04/compactacao-javascript/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Movendo itens entre list boxs</title>
		<link>http://gujs.com.br/blog/2007/04/movendo-itens-entre-list-boxs/</link>
		<comments>http://gujs.com.br/blog/2007/04/movendo-itens-entre-list-boxs/#comments</comments>
		<pubDate>Tue, 10 Apr 2007 02:40:53 +0000</pubDate>
		<dc:creator>Rafael Quines</dc:creator>
				<category><![CDATA[Cross-browser]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Tutoriais Básicos]]></category>

		<guid isPermaLink="false">http://gujs.com.br/blog/2007/04/movendo-itens-entre-list-boxs/</guid>
		<description><![CDATA[Hoje em dia, este é um recurso muito usado em formulários em geral. Permite que sejam selecionados vários itens para um relatório, por exemplo. Normalmente se tem um listbox com os ítens disponíveis, e outro, inicialmente vazio, ficam os itens selecionados na primeira list.

Um bom exemplo seria em um cadastro de vendedor, o usuário deve [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje em dia, este é um recurso muito usado em formulários em geral. Permite que sejam selecionados vários itens para um relatório, por exemplo. Normalmente se tem um listbox com os ítens disponíveis, e outro, inicialmente vazio, ficam os itens selecionados na primeira list.</p>
<p><span id="more-15"></span></p>
<p>Um bom exemplo seria em um cadastro de vendedor, o usuário deve selecionar as cidades que aquele vendedor atua. Numa list, aparece todas as cidades cadastradas. Na outra, só as seleiconadas para aquele vendedor.</p>
<p>Em primeiro lugar, teremos 2 lists: listOrigem e a listDestino.</p>
<pre class="prettyprint">
&lt;select name="listOrigem" id="listOrigem" MULTIPLE size="10"&gt;
&lt;option value="1"&gt;Porto Alegre&lt;/option&gt;
&lt;option value="2"&gt;São Paulo&lt;/option&gt;
&lt;option value="3"&gt;Rio de Janeiro&lt;/option&gt;
&lt;option value="4"&gt;Natal&lt;/option&gt;
&lt;option value="5"&gt;Fortaleza&lt;/option&gt;
&lt;/select&gt;

&lt;select name="listDestino" id="listDestino" MULTIPLE size="10"&gt;
&lt;/select&gt;
</pre>
<p>e quatro simples funções, facilmente adaptáveis para o uso em outras situações:</p>
<pre class="prettyprint">
//1. Para passar todos os ítens da list de origem para a de destino:

function allLeft2Right() {
  var listOri = document.getElementById("listOrigem")
  var listDest = document.getElementById("listDestino");
  for(var i = 0; i < listOri.length; i++) {
    var opcao = listOri.options[i];
    var novaOpcao = new Option(opcao.text, listDest.length);
    novaOpcao.value = opcao.value;
    listOri.remove(i);
    try {
      listDest.add(novaOpcao,null);
    } catch (e) {
      listDest.add(novaOpcao);
    }
    i--;
  }
}

//2. função para passar todos os ítens do destino para a origem:

function allRight2Left() {
  var listOri = document.getElementById("listOrigem")
  var listDest = document.getElementById("listDestino");
  for(var i = 0; i < listDest.length; i++) {
    var opcao = listDest.options[i];
    var novaOpcao = new Option(opcao.text, listOri.length);
    novaOpcao.value = opcao.value;
    listDest.remove(i);
    try {
      listOri.add(novaOpcao,null);
    } catch (e) {
      listOri.add(novaOpcao);
    }
    i--;
  }
}

//3. Função para apenas os ítens selecionados da origem para o destino:

function left2Right() {
  var listOri = document.getElementById("listOrigem")
  var listDest = document.getElementById("listDestino");
  for(var i = 0; i < listOri.length; i++) {
    var opcao = listOri.options[i];
    if(opcao.selected) {
      var novaOpcao = new Option(opcao.text, listDest.length);
      novaOpcao.value = opcao.value;
      listOri.remove(i);
      try {
        listDest.add(novaOpcao,null); //Firefox
      } catch(e) {
        listDest.add(novaOpcao); //IE
      }
      i--;
    }
  }
}

//4. e por último, para passar os ítens marcados do destino para a origem

function right2Left() {
  var listOri = document.getElementById("listOrigem")
  var listDest = document.getElementById("listDestino");
  for(var i = 0; i < listDest.length; i++) {
    var opcao = listDest.options[i];
    if(opcao.selected) {
      var novaOpcao = new Option(opcao.text, listOri.length);
      novaOpcao.value = opcao.value;
      listDest.remove(i);
      try {
        listOri.add(novaOpcao,null);
      } catch (e) {
        listOri.add(novaOpcao);
      }
      i--;
    }
  }
}
</pre>
<p>Exemplo funcionando:</p>
<table>
<tr>
<td>
<select name="listOrigem" id="listOrigem" MULTIPLE size="10">
<option value="1">Porto Alegre</option><br />
<option value="2">São Paulo</option><br />
<option value="3">Rio de Janeiro</option><br />
<option value="4">Natal</option><br />
<option value="5">Fortaleza</option><br />
</select>
</td>
<td>
<input type="button" value="&gt;" onclick="left2Right();"/><br/><br/></p>
<input type="button" value="&gt;&gt;" onclick="allLeft2Right()"/><br/><br/></p>
<input type="button" value="&lt;&lt;" onclick="allRight2Left()"/><br/><br/></p>
<input type="button" value="&lt;" onclick="right2Left();"/><br/><br/>
</td>
<td>
<select name="listDestino" id="listDestino" MULTIPLE size="10">
</select>
</td>
</tr>
</table>
<p><script type="text/javascript">
function allLeft2Right() {
  var listOri = document.getElementById("listOrigem")
  var listDest = document.getElementById("listDestino");
  for(var i = 0; i < listOri.length; i++) {
    var opcao = listOri.options[i];
    var novaOpcao = new Option(opcao.text, listDest.length);
    novaOpcao.value = opcao.value;
    listOri.remove(i);
    try {
      listDest.add(novaOpcao,null);
    } catch (e) {
      listDest.add(novaOpcao);
    }
    i--;
  }
}
//2. função para passar todos os ítens do destino para a origem:
function allRight2Left() {
  var listOri = document.getElementById("listOrigem")
  var listDest = document.getElementById("listDestino");
  for(var i = 0; i < listDest.length; i++) {
    var opcao = listDest.options[i];
    var novaOpcao = new Option(opcao.text, listOri.length);
    novaOpcao.value = opcao.value;
    listDest.remove(i);
    try {
      listOri.add(novaOpcao,null);
    } catch (e) {
      listOri.add(novaOpcao);
    }
    i--;
  }
}
//3. Função para apenas os ítens selecionados da origem para o destino:
function left2Right() {
  var listOri = document.getElementById("listOrigem")
  var listDest = document.getElementById("listDestino");
  for(var i = 0; i < listOri.length; i++) {
    var opcao = listOri.options[i];
    if(opcao.selected) {
      var novaOpcao = new Option(opcao.text, listDest.length);
      novaOpcao.value = opcao.value;
      listOri.remove(i);
      try {
        listDest.add(novaOpcao,null); //Firefox
      } catch(e) {
        listDest.add(novaOpcao); //IE
      }
      i--;
    }
  }
}
//4. e por último, para passar os ítens marcados do destino para a origem
function right2Left() {
  var listOri = document.getElementById("listOrigem")
  var listDest = document.getElementById("listDestino");
  for(var i = 0; i < listDest.length; i++) {
    var opcao = listDest.options[i];
    if(opcao.selected) {
      var novaOpcao = new Option(opcao.text, listOri.length);
      novaOpcao.value = opcao.value;
      listDest.remove(i);
      try {
        listOri.add(novaOpcao,null);
      } catch (e) {
        listOri.add(novaOpcao);
      }
      i--;
    }
  }
}
</script></p>
<p>Agora é só vc adaptar. Se preferir que no OnDblClick no combo de origem passar para o destino, é só colocar no OnDblClick do listOrigem a chamada ao left2Right. Poderia criar dois botões também para passar todos os ítens de um campo para o outro.</p>
<p>Bom, espero ter ajudado. Muitas vezes já procurei um artigo como esse, com exemplos na WEB, porém não encontrei. Então fica aqui minha contribuição.</p>
]]></content:encoded>
			<wfw:commentRss>http://gujs.com.br/blog/2007/04/movendo-itens-entre-list-boxs/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Ordenando um array numérico</title>
		<link>http://gujs.com.br/blog/2007/03/ordenando-um-array-numerico/</link>
		<comments>http://gujs.com.br/blog/2007/03/ordenando-um-array-numerico/#comments</comments>
		<pubDate>Thu, 29 Mar 2007 15:01:31 +0000</pubDate>
		<dc:creator>Matheus Zeuch</dc:creator>
				<category><![CDATA[Cross-browser]]></category>
		<category><![CDATA[Tutoriais Básicos]]></category>

		<guid isPermaLink="false">http://gujs.com.br/blog/2007/03/ordenando-um-array-numerico/</guid>
		<description><![CDATA[Um pequeno impecílho, na hora de ordenar um vetor número em javascript, pode deixar o programador com um pouco de dor de cabeça. O método sort() do objeto Array utiliza um algoritmo de ordenação de caracteres para ordenar os itens do array, ou seja, quando você quer ordenar um array de números, ele coloca o [...]]]></description>
			<content:encoded><![CDATA[<p>Um pequeno impecílho, na hora de ordenar um vetor número em javascript, pode deixar o programador com um pouco de dor de cabeça. O método <code>sort()</code> do objeto <code>Array</code> utiliza um algoritmo de ordenação de caracteres para ordenar os itens do array, ou seja, quando você quer ordenar um array de números, ele coloca o 10 antes do 2, por exemplo. Veja como resolver isto.<span id="more-13"></span></p>
<pre class="prettyprint">[4,7,2,10,35,67,3,2].sort(function(){return arguments[0] - arguments[1];});</pre>
<p>Note que estamos passando um parâmetro para o método <code>sort()</code>. Esse parâmetro é a função que vamos utilizar para determinar se qual dos dois itens é maior. Se não passarmos esse parâmetro para o <code>sort</code>, ele vai considerar que os itens do array são caracteres.</p>
<p>Você também pode criar um novo método para o objeto <code>Array</code>, o que lhe permite usar este novo método em qualquer array. Para isso, vamos usar o conceito de <code>prototype</code> do javascript. Veja como ficou nosso novo método para ordenar vetores numéricos:</p>
<pre class="prettyprint">Array.prototype.sortnum = function() {
  return this.sort(function(){return arguments[0] - arguments[1];});
}</pre>
<p>Para finalizar, preparei um exemplo para vocês demonstrando os resultados da ordenação normal e da utilizando nosso novo método <code>sortnum</code>.</p>
<p><strong><a href="http://gujs.com.br/demo/ordenando-array-numerico/">Exemplo</a></strong> | <strong><a href="http://gujs.com.br/blog/wp-content/uploads/2007/03/ordenando-array-numerico.zip">Download</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://gujs.com.br/blog/2007/03/ordenando-um-array-numerico/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tutorial básico sobre Ajax</title>
		<link>http://gujs.com.br/blog/2007/03/tutorial-basico-sobre-ajax/</link>
		<comments>http://gujs.com.br/blog/2007/03/tutorial-basico-sobre-ajax/#comments</comments>
		<pubDate>Tue, 27 Mar 2007 11:34:51 +0000</pubDate>
		<dc:creator>Eduardo Bohrer</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Cross-browser]]></category>
		<category><![CDATA[Diversos]]></category>
		<category><![CDATA[Tutoriais Básicos]]></category>

		<guid isPermaLink="false">http://gujs.com.br/blog/2007/03/tutorial-basico-sobre-ajax/</guid>
		<description><![CDATA[Asynchronous Javascript and XML, mais conhecido como AJAX.
O que é Ajax?
Ajax foi criado com o principio de ser uma maneira rápida e otimizada de podermos fazer requisições WEB, sendo esta totalmente transparente ao usuário.
Sabemos que todo o tipo de acesso a dados de um servidor de sites na internet, roda encima de requisições WEB(Requisições via [...]]]></description>
			<content:encoded><![CDATA[<p><em><strong>Asynchronous Javascript and XML</strong>, mais conhecido como <strong>AJAX</strong>.</em></p>
<p><strong>O que é Ajax?</strong><br />
Ajax foi criado com o principio de ser uma maneira rápida e otimizada de podermos fazer requisições WEB, sendo esta totalmente transparente ao usuário.<span id="more-9"></span></p>
<p>Sabemos que todo o tipo de acesso a dados de um servidor de sites na internet, roda encima de requisições WEB(Requisições via Protocolo HTTP ao servidor de destino), e por resposta o servidor também com o mesmo protocolo retorna os dados solicitados, tais como HTML&#8217;s.</p>
<p>Este processo normalmente não é notado na visão do usuário, mas é isso que acontece quando digitamos em nosso navegador de internet um endereço da WEB.O ajax por sua vez também roda encima desta lógica.</p>
<p><strong>Mas e afinal, para que usamos o Ajax?</strong></p>
<p>Hoje esta tecnologia é utilizada para uma infinidade de processos, mas o que precisamos saber não é o que fazer com ele, mas sim saber como ele trabalha para podermos adequar tal tecnologia em nosso dia-a-dia.<br />
Um Exemplo Básico da utilização de ajax, é um refresh de página, sem que o usuário necessite faze-lo.</p>
<p>O programador que cria a página, programa uma requisição ajax, para que busque novos dados no servidor em um limite de tempo, e então também por javascript, altera a visualização do usuário, talvez inserindo linhas em uma tabela ou algo do gênero, assim dando um aspecto de atualização automática.</p>
<p><strong>Como Utilizar?</strong></p>
<p>Hoje, o ajax é suportado pelos principais browsers disponíveis no mercado, e utilizados pela comunidade WEB.</p>
<p>Para isso utilizados objetos javascript, que rodam encima do browser do usuário e transitam dados por estas requisições.</p>
<p>Assim sendo, podemos fazer interações com processos de servidor, sem que seja necessário por exemplo recarregar a página do usuário, ou mesmo se quer visualize tal iteração.</p>
<p><em>Vejamos um exemplo básico.</em></p>
<pre class="prettyprint">
//variavel ajax
var ajax = null;

//função que faz a requisição ajax
function requisicaoAjax(){
    //utilizado para requisições no browser Internet Explorer
    if (window.ActiveXObject) ajax = new ActiveXObject('Microsoft.XMLHTTP');
    //utilizado como o padrão javascript para requisições AJAX.
    else if (window.XMLHttpRequest) ajax = new XMLHttpRequest();
    //se a variável ajax for nula, logo o browser não suporta tal tecnologia
    if(ajax != null){
      //abre a requisição ajax, passando o método de acesso, a url solicitada e o parâmetro sobre sincronia
      ajax.open('GET','http://gujs.com.br/',false);
      //seta a funcao que sera chamada quando o ajax for retornado
      ajax.onreadystatechange = statusAjax;
      //inicia o tranporte
      ajax.send(null);
    }
}

//função que trata o retorno ajax
function statusAjax(){
  //caso o status do ajax esteja ok, então chama a função retornoAjax enviando o retorno da requisição como parâmetro
  if(ajax.readyState == 4 &amp;&amp; ajax.status == 200){
    retornoAjax(ajax.responseText);
  }
}

//função que é chamada quando o ajax for retornado
function retornoAjax(response){
  //dá um alerta no texto de retorno
  alert(response);
}
requisicaoAjax();</pre>
<p>1º) Criamos um objeto para o transporte do ajax;</p>
<p>2º) Setamos ao objeto as diretivas da solicitação como a url a ser solicitado e o método. O terceiro parâmetro é se deve ser assíncrono ou não, no caso estamos passando false, para o javascript aguardar o retorno da requisição.</p>
<p>3º) Indicamos qual será a função que ira fazer o tratamento de estados da requisição. (O status da requisição é retornado pelo browser para tratamento a cada vez que este status muda).<br />
Você pode ver a listagem completa de status aqui: <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html</a></p>
<p>Quando dizemos</p>
<pre class="prettyprint">
ajax.onreadystatechange = statusAjax;</pre>
<p>Estamos indicando que toda a vez que este ajax mudar de status, ele deve chamar esta função.</p>
<p>No nosso caso, o único status interessante é o status de requisição ok.</p>
<p>Se a requisição retornar um status ok, então a partir daí trabalharemos em nosso refresh, como dito acima, onde trataríamos os dados retornados e aplicaríamos na visualização do usuário;</p>
<p>Uma coisa que devemos considerar e que por sua vez é de grande importância, é que não podemos fazer requisições Ajax a outro domínio diferente ao que o site atual roda.<br />
Por exemplo:<br />
Sendo que minha página exemplo_ajax.htm estivesse dentro de http://www.gujs.com.br/, só poderei fazer requisições ajax para arquivos que fiquem dentro de http://www.gujs.com.br/.</p>
<p>Este exemplo é bem simples, mas apenas para podermos ter uma noção de como funciona uma requisição ajax.</p>
<p>Existem hoje, várias bibliotecas javascript para formalizar tais requisições, bibliotecas que fazem o controle de estados inválidos da requisição, ou mesmo que facilitam o transporte de requisições via método POST.</p>
<p>O intuito deste artigo é simplesmente desmistificar este fênomeno chamado ajax.</p>
<p>Fique a vontade para deixarem comentários, ou entrar em contato ok?</p>
<p>Até a próxima pessoal;</p>
]]></content:encoded>
			<wfw:commentRss>http://gujs.com.br/blog/2007/03/tutorial-basico-sobre-ajax/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.416 seconds -->
<!-- Cached page served by WP-Cache -->
