tutoriais mais recente desenvolvimento web
 

O objeto XMLHttpRequest


Todos os navegadores modernos têm um objeto embutido XMLHttpRequest para solicitar dados de um servidor.

Todos os principais navegadores têm um parser XML built-in para acessar e manipular XML.


O objeto XMLHttpRequest

O objeto XMLHttpRequest pode ser utilizado para solicitar dados de um servidor web.

O objeto XMLHttpRequest é a developers dream , porque você pode:

  • Atualizar uma página web sem recarregar a página
  • dados da solicitação de um servidor - após a página foi carregada
  • Receber dados de um servidor - depois que a página for carregada
  • Enviar dados para um servidor - no fundo

Exemplo XMLHttpRequest

Quando você digitar um caractere no campo de entrada abaixo, um XMLHttpRequest é enviado para o servidor, e algumas sugestões de nomes são devolvidos (from the server) :

Exemplo

Start typing a name in the input field below:

Name:

Suggestions:


O envio de um XMLHttpRequest

Todos os navegadores modernos têm um objeto XMLHttpRequest built-in.

A sintaxe comum JavaScript para usá-lo se parece muito com isto:

Exemplo

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
       // Action to be performed when the document is read;
    }
};
xhttp.open("GET", " filename ", true);
xhttp.send();
Tente você mesmo "

Criando um objeto XMLHttpRequest

A primeira linha no exemplo acima cria um objet XMLHttpRequest:

var xhttp = new XMLHttpRequest();

O evento onreadystatechange

A propriedade readyState detém o status do XMLHttpRequest.

O evento onreadystatechange é acionado toda vez que as mudanças readyState.

Durante um pedido do servidor, o readyState muda de 0 a 4:

0: pedido não inicializado
1: conexão do servidor estabelecida
2: pedido recebido
3: solicitação de processamento
4: solicitar acabado e de resposta está pronto

Na propriedade onreadystatechange, especifique uma função a ser executada quando o readyState muda:

xhttp.onreadystatechange = function()

Quando readyState é 4 eo estado é de 200, a resposta está pronta:

if (xhttp.readyState == 4 && xhttp.status == 200)

Propriedades XMLHttpRequest e Métodos

Método Descrição
new XMLHttpRequest() Cria um novo objeto XMLHttpRequest
open( method, url, async ) Especifica o tipo de pedido
method : o tipo de solicitação: GET ou POST
url : o local do arquivo
async : true (asynchronous) ou falso (synchronous)
send() Envia uma solicitação para o servidor (used for GET)
send( string ) Envia uma série pedido para o servidor (used for POST)
onreadystatechange A função a ser chamada quando o ReadyState propriedade alterações
readyState O status do XMLHttpRequest
0: pedido não inicializado
1: conexão do servidor estabelecida
2: pedido recebido
3: solicitação de processamento
4: solicitar acabado e de resposta está pronto
status 200: OK
404 Página Não Encontrada
responseText Os dados de resposta como uma string
responseXML Os dados de resposta como dados XML

Acesso entre domínios

Por razões de segurança, os navegadores modernos não permitem o acesso entre domínios.

Isto significa que tanto a página da web e o ficheiro XML que tenta carregar, deve estar localizado no mesmo servidor.

Os exemplos w3ii todos os arquivos Open XML localizados no domínio w3ii.

Se você quiser usar o exemplo acima em uma de suas próprias páginas web, os arquivos XML carregadas deve estar localizado em seu próprio servidor.


A propriedade responseText

A propriedade responseText retorna a resposta como uma string.

Se você quiser usar a resposta como uma cadeia de texto, use a propriedade responseText:

Exemplo

document.getElementById("demo").innerHTML = xmlhttp.responseText;
Tente você mesmo "

A propriedade responseXML

A propriedade responseXML retorna a resposta como um objeto DOM XML.

Se você quiser usar a resposta como um objeto DOM XML, use a propriedade responseXML:

Exemplo

Solicitar o arquivo cd_catalog.xml e usar a resposta como um objeto DOM XML:

xmlDoc = xmlhttp.responseXML;
txt = "";
x = xmlDoc.getElementsByTagName("ARTIST");
for (i = 0; i < x.length; i++) {
    txt += x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("demo").innerHTML = txt;
Tente você mesmo "

GET ou POST?

GET é mais simples e mais rápido do que o POST, e pode ser utilizado na maioria dos casos.

No entanto, sempre use pedidos POST quando:

  • Um arquivo em cache não é uma opção (update a file or database on the server)
  • O envio de uma grande quantidade de dados para o servidor (POST não tem limitações de tamanho)
  • Envio de entrada do usuário (which can contain unknown characters) , POST é mais robusto e seguro de GET

O url - Um arquivo em um servidor

O parâmetro url do open() método, é um endereço para um arquivo em um servidor:

xmlhttp.open("GET", "xmlhttp_info.txt", true);

O arquivo pode ser qualquer tipo de arquivo, como .txt e .xml, ou arquivos de script de servidor como asp e php (que pode executar ações no servidor antes de enviar a resposta de volta).


Asynchronous - Verdadeiro ou Falso?

Para enviar a solicitação de forma assíncrona, o parâmetro assíncrono do open() método tem de ser definida como true:

xmlhttp.open("GET", "xmlhttp_info.txt", true);

Envio de forma assíncrona solicita é uma grande melhoria para desenvolvedores web. Muitas das tarefas executadas no servidor são muito demorado.

Enviando de forma assíncrona, o JavaScript não tem que esperar a resposta do servidor, mas pode:

  • executar outros scripts enquanto aguarda a resposta do servidor
  • lidar com a resposta quando a resposta está pronta

Async = true

Ao usar async = true, especifique uma função a ser executada quando a resposta está pronto no evento onreadystatechange:

Exemplo

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
       document.getElementById("demo").innerHTML = xmlhttp.responseText;
    }
};
xmlhttp.open("GET", "xmlhttp_info.txt", true);
xmlhttp.send();
Tente você mesmo "

Async = false

Para usar assíncrono = false, altere o terceiro parâmetro na open() método para false:

xmlhttp.open("GET", "xmlhttp_info.txt", false);

Usando assíncrono = false não é recomendado, mas para alguns pequenos pedidos este pode ser ok.

Lembre-se de que o JavaScript não vai continuar a executar, até que a resposta do servidor está pronto. Se o servidor estiver ocupado ou lenta, o aplicativo irá travar ou parar.

Note: Quando você usa assíncrono = false, não escreva uma função onreadystatechange - basta colocar o código após o send() declaração:

Exemplo

xmlhttp.open("GET", "xmlhttp_info.txt", false);
xmlhttp.send();
document.getElementById("demo").innerHTML = xmlhttp.responseText;
Tente você mesmo "

Analisador XML

Todos os navegadores modernos têm um parser XML embutido.

O XML Document Object Model (the XML DOM) contém uma grande quantidade de métodos para acessar e editar XML.

No entanto, antes de um documento XML pode ser acessado, ele deve ser carregado em um objeto DOM XML.

Um analisador XML pode ler texto simples e convertê-lo em um objeto DOM XML.


Analisar uma cadeia de texto

Este exemplo analisa uma seqüência de texto em um objeto DOM XML, e extrai a informação a partir dele com JavaScript:

Exemplo

<html>
<body>

<p id="demo"></p>

<script>
var text, parser, xmlDoc;

text = "<bookstore><book>" +
"<title>Everyday Italian</title>" +
"<author>Giada De Laurentiis</author>" +
"<year>2005</year>" +
"</book></bookstore>";

parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");

document.getElementById("demo").innerHTML =
xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
</script>

</body>
</html>
Tente você mesmo "

Navegadores antigos (IE5 and IE6)

Versões antigas do Internet Explorer (IE5 and IE6) não suportam o objeto XMLHttpRequest.

Para lidar com IE5 e IE6, verifique se o navegador suporta o objeto XMLHttpRequest, ou então criar um ActiveXObject:

Exemplo

if (window.XMLHttpRequest) {
    // code for modern browsers
    xmlhttp = new XMLHttpRequest();
 } else {
    // code for old IE browsers
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
Tente você mesmo "

Versões antigas do Internet Explorer (IE5 and IE6) não suportam o objeto DOMParser.

Para lidar com IE5 e IE6, verifique se o navegador suporta o objeto DOMParser, ou então criar um ActiveXObject:

Exemplo

if (window.DOMParser) {
  // code for modern browsers
  parser = new DOMParser();
  xmlDoc = parser.parseFromString(text,"text/xml");
} else {
  // code for old IE browsers
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async = false;
  xmlDoc.loadXML(text);
Tente você mesmo "

Exemplos

mais Exemplos

Recuperar informações de cabeçalho com getAllResponseHeaders()
Recuperar informações de cabeçalho de um recurso (file) .

Recuperar informações específicas cabeçalho com getResponseHeader()
Recuperar informações de cabeçalho específico de um recurso (file) .

Recuperar o conteúdo de um arquivo ASP
Como uma página web pode se comunicar com um servidor web, enquanto um tipo de usuário caracteres em um campo de entrada.

Recuperar o conteúdo de um banco de dados
Como uma página web pode buscar informações de um banco de dados com o objeto XMLHttpRequest.

Recuperar o conteúdo de um arquivo XML
Criar um XMLHttpRequest para recuperar dados de um arquivo XML e exibir os dados em uma tabela HTML.