<?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; Cross-browser</title>
	<atom:link href="http://gujs.com.br/blog/categoria/cross-browser/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>MooTools &#8211; Ótimo framework JavaScript</title>
		<link>http://gujs.com.br/blog/2007/04/mootools-otimo-framework-javascript/</link>
		<comments>http://gujs.com.br/blog/2007/04/mootools-otimo-framework-javascript/#comments</comments>
		<pubDate>Mon, 30 Apr 2007 03:06:01 +0000</pubDate>
		<dc:creator>Rafael Quines</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Cross-browser]]></category>
		<category><![CDATA[Frameworks e APIs]]></category>
		<category><![CDATA[Orientação à Objetos]]></category>

		<guid isPermaLink="false">http://gujs.com.br/blog/2007/04/mootools-otimo-framework-javascript/</guid>
		<description><![CDATA[MooTools é um framework javascript orientado a objetos. É muito fácil de usar e totalmente extensível, sendo simples para você criar suas classes usando recursos desse Frameworks. Baseado em Prototype, esse framework cria e sobrescreve métodos de objetos javascript já existentes, facilitando muito o seu uso.

Segue uma maneira muito simples de fazer uma requisição ajax [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mootools.net">MooTools</a> é um framework javascript orientado a objetos. É muito fácil de usar e totalmente extensível, sendo simples para você criar suas classes usando recursos desse Frameworks. Baseado em Prototype, esse framework cria e sobrescreve métodos de objetos javascript já existentes, facilitando muito o seu uso.<br />
<span id="more-22"></span><br />
Segue uma maneira muito simples de fazer uma requisição ajax usando o mootools:</p>
<pre class="prettyprint">
&lt;script src="mootools.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
    var url = "./inc/ajax_processa.php";
    var params = {operacao: 'excluiUsuario', idUsuario: '50'};
    /*
    o postBody pode receber tanto uma querystring
    ("operacao=excluiUsuario&#038;idUsuario=50"), um objeto,
    como no exemplo, ou então um elemento form
    */
    var myAjax = new Ajax(url, {method: 'post', postBody: params}).request();
&lt;/script&gt;
</pre>
<p>Além de Ajax, o MooTools tem muitos outros recursos. Por exemplo, para quem já precisou pegar o tamanho da janela, sabe que é um problema para ser cross-browser, usando document.documentElement.clientWidth ou document.body.clientWidth. Você não teria esse problema. Apenas dar o include no arquivo do mootools, e o objeto window terá dois novos métodos: getWidth() e getHeight(). Muito interessante neh.</p>
<p>Algumas funções auxiliares também foram adicionados nos objetos javascript, como o método &#8220;trim()&#8221; em todas as strings, métodos de conversão de QueryString para Objeto JSON e vice-versa. Arrays ganharam novos métodos como forEach, extend, associate, remove. Elementos ganharam também getParent(), getTag(), getValue(), injectBefore(), injectAfter(), e muito mais.</p>
<p>Ainda não explorei tanto, mas uma coisa que dá pra notar é que o framework se propõe a facilitar ainda mais o dia-a-dia com JavaScript. Por favor, gostaria que comentassem a opinião dos leitores sobre o Mootools. Para quem não conhece, vale a pena pelo menos dar uma olhada.</p>
]]></content:encoded>
			<wfw:commentRss>http://gujs.com.br/blog/2007/04/mootools-otimo-framework-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Contagem regressiva</title>
		<link>http://gujs.com.br/blog/2007/04/contagem-regressiva/</link>
		<comments>http://gujs.com.br/blog/2007/04/contagem-regressiva/#comments</comments>
		<pubDate>Thu, 19 Apr 2007 00:02:43 +0000</pubDate>
		<dc:creator>Matheus Zeuch</dc:creator>
				<category><![CDATA[Cross-browser]]></category>
		<category><![CDATA[Downloads e Exemplos]]></category>
		<category><![CDATA[Tutoriais Intermediários]]></category>

		<guid isPermaLink="false">http://gujs.com.br/blog/2007/04/contagem-regressiva/</guid>
		<description><![CDATA[Hoje vamos aprender a fazer um contador regressivo simples para uma data e hora futura. Nosso contador deve mostrar o resultado em um formato texto, numa tag span, para que seu estilo possa ser configurado. O resultado é interessante.
O código abaixo é a parte principal do nosso contador. Observe que utilizei variáveis para setar qual [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje vamos aprender a fazer um contador regressivo simples para uma data e hora futura. Nosso contador deve mostrar o resultado em um formato texto, numa tag span, para que seu estilo possa ser configurado. O resultado é interessante.<span id="more-18"></span></p>
<p>O código abaixo é a parte principal do nosso contador. Observe que utilizei variáveis para setar qual a data e hora futura. A vantagem disso é que essas variáveis podem ser atualizadas por uma outra função javascript, fazendo com que o nosso contador possa ser atualizado em tempo real (veremos isso em funcionamento no exemplo prático).</p>
<pre class="prettyprint">
var YY = 2007;
var MM = 12;
var DD = 31;
var HH = 23;
var MI = 59;
var SS = 59; 

function atualizaContador() {
  var hoje = new Date();
  var futuro = new Date(YY,MM-1,DD,HH,MI,SS); 

  var ss = parseInt((futuro - hoje) / 1000);
  var mm = parseInt(ss / 60);
  var hh = parseInt(mm / 60);
  var dd = parseInt(hh / 24); 

  ss = ss - (mm * 60);
  mm = mm - (hh * 60);
  hh = hh - (dd * 24); 

  var faltam = '';
  faltam += (dd &amp;&amp; dd &gt; 1) ? dd+' dias, ' : (dd==1 ? '1 dia, ' : '');
  faltam += (toString(hh).length) ? hh+' hr, ' : '';
  faltam += (toString(mm).length) ? mm+' min e ' : '';
  faltam += ss+' seg'; 

  if (dd+hh+mm+ss &gt; 0) {
    document.getElementById('contador').innerHTML = faltam;
    setTimeout(atualizaContador,1000);
  } else {
    document.getElementById('contador').innerHTML = 'CHEGOU!!!!';
    setTimeout(atualizaContador,1000);
  }
}</pre>
<p>A função <code>atualizaContador()</code> foi escrita de maneira que possa ser alterada facilmente. Você pode, por exemplo, alterar o código para que retorne o contador em vez de exibí-lo.</p>
<p>Abaixo está o código html que utilizei para demonstrar o funcionamento. Fiz com que o evento <code>onchange</code> dos campos atualizem as variáveis da data futura.</p>
<pre class="prettyprint">
&lt;body onload="atualizaContador()"&gt;
&lt;input size="1" onchange="DD=this.value" style="text-align: center" /&gt; /
&lt;input size="1" onchange="MM=this.value" style="text-align: center" /&gt; /
&lt;input size="4" onchange="YY=this.value" style="text-align: center" /&gt; às
&lt;input size="1" onchange="HH=this.value" style="text-align: center" /&gt; :
&lt;input size="1" onchange="MI=this.value" style="text-align: center" /&gt; :
&lt;input size="1" onchange="SS=this.value" style="text-align: center" /&gt;
&lt;br /&gt;
Faltam &lt;span id="contador"&gt;&lt;/span&gt;
&lt;/body&gt;</pre>
<p>Você pode ver um exemplo em funcionamento deste código aqui. Ou se preferir, pode baixar o código para estudar melhor.</p>
<p><a href="http://gujs.com.br/demo/contagem-regressiva"><strong>Exemplo</strong></a> | <a href="http://gujs.com.br/blog/wp-content/uploads/2007/04/contagem-regressiva.zip"><strong>Download</strong></a></p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://gujs.com.br/blog/2007/04/contagem-regressiva/feed/</wfw:commentRss>
		<slash:comments>18</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>
		<item>
		<title>Ordenando listas com Javascript</title>
		<link>http://gujs.com.br/blog/2007/03/ordenando-listas-com-javascript/</link>
		<comments>http://gujs.com.br/blog/2007/03/ordenando-listas-com-javascript/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 18:26:01 +0000</pubDate>
		<dc:creator>Matheus Zeuch</dc:creator>
				<category><![CDATA[Cross-browser]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Downloads e Exemplos]]></category>
		<category><![CDATA[Orientação à Objetos]]></category>
		<category><![CDATA[Tutoriais Avançados]]></category>

		<guid isPermaLink="false">http://gujs.com.br/blog/2007/03/ordenando-listas-com-javascript/</guid>
		<description><![CDATA[A classe SortableList é um pequeno exemplo de utilização de métodos DOM sendo utilizados para facilitar a ordenação de itens de uma lista.
Para utilizar a classe, basta importar o arquivo js e instanciar um objeto que estará associado à sua lista. Feito isso você pode criar seus próprios links para manipular os eventos de ordenação [...]]]></description>
			<content:encoded><![CDATA[<p>A classe <code>SortableList</code> é um pequeno exemplo de utilização de métodos DOM sendo utilizados para facilitar a ordenação de itens de uma lista.<span id="more-10"></span></p>
<p>Para utilizar a classe, basta importar o arquivo js e instanciar um objeto que estará associado à sua lista. Feito isso você pode criar seus próprios links para manipular os eventos de ordenação da lista (mover para cima ou para baixo). Veja o exemplo abaixo:</p>
<pre class="prettyprint">var bozo;

function init() { bozo = new SortableList($('list')); } //&lt;ul id="list"&gt;

window.onload = init;</pre>
<p>Ao instanciar o <code>SortableList</code> você também pode definir duas opções interessantes:</p>
<ul>
<li><strong>A primeira é o &#8220;rotate&#8221;</strong>, que define se os itens vão girar ou não (<code>true</code> ou <code>false</code>), ou seja, se o primeiro da lista vai para baixo quando o usuário clicar para cima, e vice-versa, quando o último item se torna o primeira ao clicar para baixo.</li>
<li><strong>E a segunda é o onComplete</strong>, onde você pode setar uma função que será executada toda vez que a lista for reordenada. Nesta função você pode, por exemplo, fazer uma requisição Ajax que salvará a ordenação no seu banco de dados, onde você pode, para isso, acessar o atributo &#8220;<code>list</code>&#8220;, que contém a lista ordenada.</li>
</ul>
<p><strong><a href="http://gujs.com.br/demo/sortable-list/">Exemplo</a></strong> | <strong><a href="http://gujs.com.br/blog/wp-content/uploads/2007/03/sortable-list.zip">Download</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://gujs.com.br/blog/2007/03/ordenando-listas-com-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

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