Desenvolvimento - Javascript
Ajax Básico: Estado de Prontidão e Código de Status
Veja neste artigo o que é estado de prontidão e código de status para aplicações Ajax, como se dá o seu funcionamento, sua implementação básica e como ambos se relacionam.
por Higor MedeirosIntrodução ao Ajax
O Ajax (Asynchronous JavaScript and XML) permite que os aplicativos se tornem muito mais dinâmicos e com maiores capacidades de respostas. Todas essas vantagens são executadas usando-se um conjunto de tecnologias como JavaScript, XML e HTML dinâmica. Dessa forma Ajax não é compreendido como uma linguagem mas sim uma tecnologia que utiliza-se de padrões existentes.
O Ajax basicamente faz solicitações ao servidor que responde a essa solicitação, sendo que o servidor apenas retorna dados brutos e não mais uma página inteira para ser exibida no navegador do usuário. Dessa forma o Ajax consegue carregar apenas partes de uma página e não mais carregar uma página inteira.
Uma das grandes vantagens para conhecer o funcionamento interno do Ajax é saber como ocorre essa solicitação e resposta entre o navegador e o servidor utilizando-se da tecnologia Ajax. O desenvolvedor que entende esse funcionamento poderá entender melhor a tecnologia e prever certos imprevistos que podem ocorrer. Com isso podem-se evitar falhas que por ventura poderiam parar o seu aplicativo ou causar aborrecimentos ao usuário que está cada vez mais exigente. Além disso, pode-se elaborar caminhos alternativos para contornar certos problemas.
Estado de Prontidão no Ajax
Para explicar melhor o funcionamento do estado de prontidão devemos primeiramente analisar os dois códigos Ajax abaixo.
Listagem 1: Exemplo do objeto de solicitação.
<head> <script language="javascript" type="text/javascript"> var request = null; function createRequest() { try { request = new XMLHttpRequest(); } catch (trymicrosoft) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (othermicrosoft) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { request = null; } } } if (request == null) alert("Error creating request object!"); } </script> </head>
Listagem 2: Solicitação ao Servidor.
<head> <script language="javascript" type="text/javascript"> function getInformacaoQualquer() { createRequest(); var url = "getInformacaoQualquerDoServidor-ajax.php"; request.open("GET", url, true); request.onreadystatechange = atualizaPagina; request.send(null); } </script> </head>
Se você não entendeu o que significa esses dois códigos recomenda-se que o leitor leia o artigo sobre o básico de Ajax que está disponível aqui no portal.
No código da listagem 2 observa-se em especial a linha “request.onreadystatechange = atualizaPagina”. Sempre que o navegador receber a resposta do servidor ele chamará essa linha. Dessa forma, o navegador chamará a função que está indicada na propriedade onreadystatechange, ou seja, ele chamará a função “atualizaPagina” que será responsável por pegar as informações que vieram do servidor e disponibilizar na página do cliente. Por exemplo, o seu site poderia estar atualizando notícias na página e assim utiliza-se Ajax para buscar as últimas notícias, após receber do servidor a notícia ele chamará essa função que simplesmente utiliza-se de Javascript para disponibilizar essa notícias na página do usuário.
Abaixo segue como a função “atualizaPagina” é implementada.
Listagem 3: Manipulando a resposta enviada pelo servidor.
function atualizaPagina() { if (request.readyState == 4) { var respostaDoServidor = request.responseText; //Setar aqui a noticia na pagina } }
Na função acima pode-se notar a presença da verificação “request.readyState == 4”. Esta linha simplesmente verifica se o estado de prontidão do servidor é igual a 4, ou seja, se a solicitação está completa.
Essa verificação ocorre porque o navegador SEMPRE executará a função de retorno (configurada em onreadystatechange) quando o estado de prontidão de seu objeto de solicitação mudar. O interessante a saber agora é quando esse estado de prontidão muda. Tem-se assim os seguintes estados de prontidão possíveis:
Estado de Prontidão 0: Quando cria-se o objeto de solicitação ele está no estado 0. Para o exemplo anterior é quando a variável request chama open.
Estado de Prontidão 1: Aqui diz-se que está no estado 1 quando a solicitação sabe como e com o que se conectar. Para o exemplo anterior é quando a propriedade onreadystatechange é configurada.
Estado de Prontidão 2: Nesse estado a solicitação está em progresso, portanto o servidor já recebeu a solicitação no script e esse programa responde essa solicitação.
Estado de Prontidão 3: No estado 3 os dados estão sendo baixados no objeto de solicitação, mas ainda não estão prontos para serem usados no código. O navegador ainda está capturando a resposta do servidor.
Estado de Prontidão 4: No estado 4 a resposta do servidor está concluída. Agora tem-se todos os dados da resposta disponíveis na propriedade responseText do objeto de solicitação. Nesse instante a propriedade onreadystatechange é executada e já pode usar os dados do servidor.
Uma informação muito importante que o desenvolvedor deve ter em mente é que a função “atualizaPagina” configurada na propriedade onreadystatechange será sempre executada quando o estado de prontidão muda, por isso que a verificação do estado de prontidão é realizada na função. Portanto, essa função será executada mais de uma vez, por exemplo quando o estado de prontidão mudar de 1 para 2 ou de 3 para 4, etc. Porém o navegador somente terá os dados (que o desenvolvedor possa realmente usar na página) quando o estado de prontidão for 4, caso contrário iremos acessar ou atualizar a página com dados inválidos ou ausentes.
Vale salientar que é sempre o navegador que chama a função “atualizaPagina”, isto ocorre porque, na comunicação entre o navegador e o servidor, o servidor sempre informa ao navegador que ele concluiu a solicitação, e assim o navegador por sua vez sabe o que fazer agora, como por exemplo chamar a função “atualizaPagina” devido a mudança do estado de prontidão. Entre outras tarefas do navegador está a de inserir a resposta do servidor na propriedade responseText após o estado de prontidão ser igual a 4. Isto dá a possibilidade de se buscar a resposta retornada pelo servidor que é o que interessa nesse caso.
Código de Status do Ajax
Outro retorno importante do servidor é o código de Status. O código de Status é um código gerado pelo servidor onde o servidor informa se encontrou o recurso de solicitação e o que esse recurso retornou ao acessa-lo.
É sempre importante lembrar do caminho percorrido entre o navegador e o servidor. O navegador cria um objeto de solicitação e envia uma solicitação ao servidor informando o script que ele deve executar. O servidor por sua vez tenta localizar esse script na url da solicitação passada pelo navegador. Às vezes o servidor não consegue encontrar esse programa ou tem problemas para acessar o recurso solicitado. Assim, o servidor retorna um código de Status informando a situação atual.
Entre os Status mais importantes tem-se o 404 que significa que o servidor não conseguiu encontrar um recurso e o código 200 indicando que não houve nenhum problema ao acessar este recurso.
Outros Status existente são:
- Código 400: Bad Request
- Código 401 Unauthorized
- Código 403 Forbidden
- Código 405 Method Not Allowed
- Código 406 Not Acceptable
- Código 408 Request Timeout
Para saber outros códigos de Status e o significado de cada veja o link disponibilizado nas referência bibliográficas.
Para verificar o código de status no seu código basta adicionar o comando “if (request.status == 200)” como pode ser exemplificado abaixo:
Listagem 4: Verificando o status retornado pelo servidor.
function atualizaPagina() { if (request.readyState == 4) { if (request.status == 200) var respostaDoServidor = request.responseText; } }
Assim, o código acima apenas verifica o status retornado pelo servidor que está configurado na variável request.
Estado de Prontidão e Código de Status em Ajax
É sempre interessante nos atentarmos para o fato de que o estado de prontidão e o código de status são coisas diferentes. O estado de prontidão informa se o servidor concluiu o processamento da solicitação. Após saber que a solicitação foi processada com sucesso ainda precisa-se verificar se não ocorreu nenhum erro. Para saber se nenhum erro foi reportado pelo servidor utiliza-se então o código de status. Portanto, para saber se realmente tudo ocorreu bem é preciso verificar tanto o estado de prontidão quando o código de status. Baseando-se nesses dois parâmetros pode-se prever determinadas situações, evitar erros e até mesmo contornar problemas que sejam recorrentes num determinado ambiente. Muitos desenvolvedores não os utilizam por não saberem da sua existência ou simplesmente por não saber como usá-los.
Conclusões
Neste artigo abordou-se o que é estado de prontidão e código de status para aplicações em tecnologia Ajax, além disso procurou-se falar sobre o seu funcionamento, implementação básica e como ambos se relacionam. É muito importante que o desenvolvedor saiba como se dá cada uma dessas etapas. Como foi dito isso poderá poupar muita dor de cabeça daqueles que trabalham com Ajax. Sugestões ou dicas continuem me enviando e-mail, estou atendendo a todas solicitações e respondendo sempre que possível.
- Como bloquear o botão CTRL e impedir impressão de página com JavascriptJavascript
- Principais Frameworks de JavascriptJavascript
- Conhecendo o HTML5 Notifications APIJavascript
- Como inverter links ou textos com JavascriptJavascript
- Criando um jogo da velha em DHTML (HTML+Javascript) com jvGameJavascript