XML DOM - objeto XMLHttpRequest

Objeto XMLHttpRequest

O objeto XMLHttpRequest oferece acesso completo ao protocolo HTTP, incluindo a capacidade de fazer requisições POST e HEAD, além de GET comuns. XMLHttpRequest pode retornar a resposta do servidor da Web de forma síncrona ou assíncrona e pode retornar conteúdo em forma de texto ou de um documento DOM.

Embora chamado de XMLHttpRequest, ele não está limitado ao uso com documentos XML: ele pode receber qualquer tipo de documento de texto.

o objeto XMLHttpRequest é chamado de AJAX um recurso chave da arquitetura de aplicativos Web.

suporte do navegador

XMLHttpRequest é bem suportado por todos os navegadores modernos. A única dependência do navegador envolve a criação do objeto XMLHttpRequest. No IE 5 e IE 6, é necessário usar o construtor específico do IE ActiveXObject(). Como mencionado em Objeto XMLHttpRequest O que é introduzido nesta seção.

Padronização W3C

O objeto XMLHttpRequest ainda não foi padronizado, mas a W3C começou a trabalhar na padronização. O conteúdo deste manual é baseado no rascunho de trabalho da padronização.

A implementação atual do XMLHttpRequest é relativamente consistente. No entanto, há diferenças sutis em relação ao padrão. Por exemplo, uma implementação pode retornar null, enquanto o padrão requer uma string vazia, ou a implementação pode definir o readyState como 3 sem garantir que todos os cabeçalhos de resposta estejam disponíveis.

Propriedade

readyState

O estado da solicitação HTTP. Quando um XMLHttpRequest é criado pela primeira vez, o valor dessa propriedade começa em 0 e aumenta até que a resposta HTTP completa seja recebida.

Cada um dos 5 estados tem um nome não oficial associado. A tabela a seguir lista o estado, o nome e o significado:

Estado Nome Descrição
0 Uninitialized Estado inicializado. O objeto XMLHttpRequest foi criado ou foi resetado pelo método abort().
1 Open O método open() foi chamado, mas o método send() não foi chamado. A solicitação ainda não foi enviada.
2 Sent O método Send() foi chamado, a solicitação HTTP foi enviada para o servidor da Web. A resposta ainda não foi recebida.
3 Receiving Todos os cabeçalhos de resposta já foram recebidos. O corpo da resposta começou a ser recebido mas não está completo.
4 Loaded A resposta HTTP já foi completamente recebida.

O valor de readyState não diminui, a menos que uma chamada ao método abort() ou open() seja feita durante o processo de tratamento do pedido. Cada vez que o valor dessa propriedade aumenta, o manipulador de eventos onreadystatechange é acionado.

responseText

Até agora, o corpo da resposta recebido pelo servidor (sem incluir o cabeçalho), ou uma string vazia se ainda não tiverem sido recebidos dados.

Se o readyState for menor que 3, essa propriedade é uma string vazia. Quando o readyState for 3, essa propriedade retorna a parte da resposta recebida até agora. Se o readyState for 4, essa propriedade armazena o corpo da resposta completo.

Se a resposta contiver um cabeçalho especificando a codificação de caracteres do corpo da resposta, use essa codificação. Caso contrário, assume-se que seja usado Unicode UTF-8.

responseXML

A resposta para o pedido, analisada como XML e usada como Objeto Documentretornar.

status

retornado pelo servidor Código de status HTTP, como 200 representa sucesso, enquanto 404 representa erro "Not Found". A leitura deste atributo quando o readyState for menor que 3 causará uma exceção.

statusText

Esta propriedade especifica o código de status HTTP da solicitação usando o nome em vez do número. Isso é, quando o status é 200, é "OK", e quando o status é 404, é "Not Found". Como o atributo status, a leitura deste atributo quando o readyState for menor que 3 causará uma exceção.

Manipulador de evento

onreadystatechange

Função de manipulador de eventos chamada sempre que o atributo readyState mudar. Quando o readyState for 3, ele pode ser chamado várias vezes.

Método

abort()

Cancelar a resposta atual, fechar a conexão e encerrar qualquer atividade de rede pendente.

Este método redefine o objeto XMLHttpRequest para o estado readyState 0 e cancela todas as atividades de rede pendentes. Por exemplo, se a solicitação levou muito tempo e a resposta não é mais necessária, você pode chamar este método.

getAllResponseHeaders()

Retornar os cabeçalhos de resposta HTTP como uma string não analisada.

Se o readyState for menor que 3, este método retorna null. Caso contrário, ele retorna todos os cabeçalhos de resposta HTTP enviados pelo servidor. Os cabeçalhos são retornados como uma string única, uma linha por cabeçalho. Cada linha é separada por um caractere de nova linha "\r\n".

getResponseHeader()

Retornar o valor do cabeçalho HTTP de resposta especificado. O parâmetro é o nome do cabeçalho HTTP de resposta a ser retornado. Pode usar qualquer maiúscula ou minúscula para especificar o nome do cabeçalho, e a comparação com o cabeçalho de resposta não distingue maiúsculas e minúsculas.

O valor de retorno deste método é o valor do cabeçalho HTTP HTTP especificado, que é uma string vazia se não receber este cabeçalho ou se o readyState for menor que 3. Se receber múltiplos cabeçalhos com o nome especificado, os valores dos cabeçalhos serão conectados e retornados, separados por vírgula e espaço.

open()

Inicializar os parâmetros da solicitação HTTP, como URL e método HTTP, mas não enviar a solicitação.

send()

Enviar uma solicitação HTTP, usando os parâmetros passados para o método open() e o corpo de solicitação opcional passado para este método.

setRequestHeader()

Configurar ou adicionar uma solicitação HTTP a uma solicitação aberta mas não enviada.

XMLHttpRequest.open()

Inicializar os parâmetros da solicitação HTTP

Sintaxe

open(method, url, async, username, password)

O parâmetro method é o método HTTP usado na solicitação. Os valores incluem GET, POST e HEAD.

O parâmetro url é o corpo da solicitação. A maioria dos navegadores implementa uma política de segurança de origem e requer que essa URL tenha o mesmo nome de host e porta que o texto contendo o script.

O parâmetro async indica que a solicitação deve ser executada de forma assíncrona. Se esse parâmetro for false, a solicitação é síncrona e as chamadas subsequentes para send() bloquearão até que a resposta seja completamente recebida. Se esse parâmetro for true ou omitido, a solicitação é assíncrona e geralmente requer um manipulador de evento onreadystatechange.

Os parâmetros username e password são opcionais e fornecem a qualificação de autenticação necessária para a url. Se especificados, eles substituem qualquer qualificação especificada na url.

Explicação

Este método inicializa os parâmetros da solicitação para uso posterior pelo método send(). Ele define o readyState como 1, remove todos os cabeçalhos de solicitação especificados anteriormente e todos os cabeçalhos de resposta recebidos anteriormente, e define os parâmetros responseText, responseXML, status e statusText como seus valores padrão. Quando o readyState for 0 (quando o objeto XMLHttpRequest é criado ou a chamada abort() é feita) e quando o readyState for 4 (quando a resposta foi recebida), a chamada desse método é segura. Quando chamado para qualquer outro estado, o comportamento do método open() é especificado.

Além de salvar os parâmetros da solicitação para uso no método send() e redefinir o objeto XMLHttpRequest para reutilização, o método open() não tem outro comportamento. É importante notar que, quando esse método é chamado, a implementação geralmente não abre uma conexão de rede com o servidor da Web.

XMLHttpRequest.send()

Enviar uma solicitação HTTP

Sintaxe

send(body)

Se o método HTTP especificado pela chamada open() for POST ou PUT, o parâmetro body especifica o corpo da solicitação, como uma string ou Objeto DocumentSe o corpo da solicitação não é necessário, esse parâmetro é null. Para qualquer outro método, esse parâmetro não é disponível e deve ser null (algumas implementações não permitem a omissão desse parâmetro).

Explicação

Este método envia uma solicitação HTTP. Se o open() não foi chamado anteriormente, ou mais especificamente, se o readyState não for 1, o send() lança uma exceção. Caso contrário, ele envia uma solicitação HTTP composta pelos seguintes componentes:

  • Método HTTP, URL e credenciais de autenticação especificados na chamada anterior open() (se houver).
  • Cabeçalho de solicitação especificado na chamada anterior setRequestHeader() (se houver).
  • Passado para este método body Parâmetros.

Assim que a solicitação for publicada, o send() configura o readyState para 2 e dispara o manipulador de evento onreadystatechange.

Se o parâmetro async da chamada anterior open() for false, este método será bloqueado e não retornará até o readyState ser 4 e a resposta do servidor ser completamente recebida. Caso contrário, se o parâmetro async for true ou se este parâmetro for omitido, o send() retornará imediatamente e, conforme explicado posteriormente, a resposta do servidor será processada em uma thread de fundo.

Se a resposta do servidor contiver uma redirecionamento HTTP, o método send() ou a thread de fundo seguirá automaticamente o redirecionamento. Quando todos os cabeçalhos de resposta HTTP forem recebidos, o send() ou a thread de fundo configurarão o readyState para 3 e dispararão o manipulador de evento onreadystatechange. Se a resposta for longa, o send() ou a thread de fundo podem disparar o manipulador de evento onreadystatechange no estado 3: isso pode ser usado como um indicador de progresso de download. Finalmente, quando a resposta estiver completa, o send() ou a thread de fundo configurarão o readyState para 4 e dispararão o manipulador de evento pela última vez.

XMLHttpRequest.setRequestHeader()

Sintaxe

setRequestHeader(name, value)

O parâmetro name é o nome do cabeçalho a ser configurado. Este parâmetro não deve incluir espaços em branco, dois pontos ou quebras de linha.

O parâmetro value é o valor do cabeçalho. Este parâmetro não deve incluir quebras de linha.

Explicação

O método setRequestHeader() especifica um cabeçalho de solicitação HTTP, que deve ser incluído na solicitação publicada através da chamada subsequente send(). Este método pode ser chamado apenas quando o readyState for 1, por exemplo, após a chamada open(), mas antes da chamada send().

Se o cabeçalho com o nome especificado já foi especificado, o novo valor deste cabeçalho é: o valor especificado anteriormente, mais uma vírgula, espaço em branco e o valor especificado por esta chamada.

Se a chamada open() especificar a qualificação de autenticação, o XMLHttpRequest enviará automaticamente um cabeçalho de autorização apropriado. No entanto, você pode usar setRequestHeader() para adicionar esse cabeçalho. Da mesma forma, se o servidor da web já tiver salvo e passado um cookie associado à URL passada para open(), o cabeçalho Cookie ou Cookie2 apropriado será automaticamente incluído na solicitação. Esses cookies podem ser adicionados aos cabeçalhos através da chamada setRequestHeader(). O XMLHttpRequest também pode fornecer um valor padrão para o cabeçalho User-Agent. Se fizer isso, qualquer valor que você especificar para esse cabeçalho será adicionado ao valor padrão.

Alguns cabeçalhos de solicitação são configurados automaticamente pelo XMLHttpRequest em vez de serem configurados por este método, para cumprir o protocolo HTTP. Isso inclui os seguintes cabeçalhos relacionados a proxies:

  • Host
  • Connection
  • Keep-Alive
  • Accept-charset
  • Accept-Encoding
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • Range