Maria está criando uma página em seu site para o cadastro de clientes, onde a busca pelo CEP preencherá automaticamente parte dos dados do endereço. Considerando que o serviço de busca é oferecido por um Web Service SOAP, e que Maria irá utilizar XMLHttpRequest, no código Java Script, a função de callback para a consulta deve:
- A)confirmar a recepção bem-sucedida, com status 500, utilizar o atributo responseText, transformado para um objeto com JSON.parse, e obter os dados nos atributos do objeto;
Errada, porque status 500 indica erro interno do servidor e JSON.parse nao combina com resposta SOAP em XML.
- B)verificar se a recepção foi concluída, com readyState valendo 0 e status 304, e utilizar o atributo response da resposta, com uso de JSON.stringify para obtenção dos dados;
Errada, porque readyState 0 indica requisicao nao iniciada e JSON.stringify faz o caminho oposto, convertendo objeto para texto JSON.
- C)verificar se a recepção foi concluída, com readyState valendo 3 e status 404, utilizar o atributo responseXML, transformado para objeto com JSON.parse, e obter os dados do objeto;
Errada, porque readyState 3 nao representa fim da resposta, status 404 indica nao encontrado e JSON.parse nao e a ferramenta adequada para XML.
- D)confirmar a recepção bem-sucedida, com status 304, utilizar o atributo responseText da resposta, e obter os dados através dos métodos de DOMParser;
Errada, porque status 304 significa cache nao modificado, nao sucesso pleno da consulta, e responseText com DOMParser esta conceitualmente desalinhado aqui.
- E)verificar se a recepção foi concluída, com readyState valendo 4 e status 200, e utilizar o atributo responseXML da resposta, com a obtenção dos dados pelos métodos de DOMParser.
Certa, porque a callback deve aguardar readyState 4 e status 200, e em SOAP a resposta deve ser tratada como XML via responseXML e DOMParser.
Gabarito: E
Quando voce usa XMLHttpRequest, a callback costuma acompanhar duas coisas: o estado da requisicao e o resultado da resposta. O ponto mais cobrado e simples: a resposta so deve ser tratada quando o readyState chega a 4, que indica que a transferencia terminou, e quando o status indica sucesso, normalmente 200. Em outras palavras, nao adianta olhar antes da hora, porque a resposta ainda pode estar incompleta ou com erro. Aqui mora a pegadinha da questao: o servico descrito e um Web Service SOAP. SOAP trabalha com XML, nao com JSON. Por isso, faz sentido usar responseXML, que entrega o conteudo ja como documento XML para ser navegado com tecnicas de DOM, como DOMParser ou selecao de nos e tags. Converter SOAP com JSON.parse seria um desvio total, porque JSON.parse serve para texto em JSON, nao para XML. A alternativa E esta correta exatamente por juntar os dois elementos certos: requisicao finalizada com readyState 4 e sucesso com status 200, e leitura da resposta como XML via responseXML. Isso e coerente com o formato do SOAP e com o uso classico de XMLHttpRequest em JavaScript. Em prova, pense assim: se e SOAP, o cheiro e de XML; se e XML, voce trabalha com responseXML e parse de DOM, nao com JSON. A banca adora trocar esses formatos para ver quem confunde tudo em um pacote so.