Ajax e filas de requisição

Recentemente, num projeto aqui do trabalho, tivemos de criar um formulário com 4 combos dinâmicos de estado/cidade na mesma página. Resolvi popular a combo de cidades usando XMLHttpRequest, e para evitar repetição de código, fiz com que os quatro combos fossem populados usando a mesma função.

Porém, não dava certo, e me retornava um erro bem estranho no Firefox. Percebi então que criando um objeto XMLHttpRequest para cada lugar em que ele seria usado funcionava corretamente, porém, ao custo de ter não apenas um, mas quatro objetos XMLHttpRequest na página.

Embora o código estivesse funcionando a contento com essa modificação, eu ainda fiquei com a pulga atrás da orelha: porque não funcionava?

Procurando aqui e ali, achei alguns links interessantes que me esclareceram muito:

O erro mostrado no firefox é esse:

Erro: uncaught exception: [Exception... "Component returned failure code: 0xc1f30001 (NS_ERROR_NOT_INITIALIZED) [nsIXMLHttpRequest.send]"
nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)"  location: "JS frame :: http://www.waltercruz.com/devel/ajaxteste/externalvar.html :: popula :: line 51"  data: no]

A questão era relativamente mais simples do que o erro que o Firefox mostra: Ao enviar uma requisição send para um objeto XMLHttpRequest que já está processando uma requisição era lançado o erro. A solução mais simples é implementar uma fila de requisições.

Por sorte, o Élcio do tableless lançou o segundo artigo de uma série que trata justamente disso. (Os links são: http://www.tableless.com.br/ajaxdemo/ e http://www.tableless.com.br/ajaxdemo2/ ).

Para simplificar, fiz um teste populando dois selects a partir de um arquivo de texto. Os testes estão em http://waltercruz.com/devel/ajaxteste/.

Mais links interessantes sobre Ajax e javascript:

This entry was posted in JavaScript and tagged , , , . Bookmark the permalink.

One Response to Ajax e filas de requisição

  1. Seguinte cara, eu consegui fazer sem esses negócio de fila. É só criar vários objetos XMLHttpRequest e não ficar dependendo de apenas UM objeto.
    No meu blog eu mostro uma função simples, mas totalmente funcional, pra ajax que faz todo o trabalho complicado pra você: http://elmicox.blogspot.com/2006/05/ajax-funo-rpida-e-simples.html

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>