XMLHttpRequest
==============

`XMLHttpRequest` é um objeto que fornece funcionalidade ao cliente para transferir dados entre um cliente e um servidor. Ele fornece uma maneira fácil de recuperar dados de um URL sem ter que fazer uma atualização de página inteira. Isso permite que uma página da Web atualize apenas uma parte do conteúdo sem interromper o que o usuário esteja fazendo. XMLHttpRequest é usado constantemente na programação de AJAX.

`XMLHttpRequest` foi originalmente projetado pela Microsoft e adotado pela Mozilla, Apple e Google. Está sendo padronizado pela WHATWG. Apesar do nome, XMLHttpRequest pode ser usado para recuperar qualquer tipo de dados, e não apenas XML, suportando também, protocolos diferentes de HTTP (incluindo file e ftp ).

Para criar uma instância de XMLHttpRequest , basta fazer isso:
```

var myRequest = new XMLHttpRequest();
```


Para obter detalhes sobre como usar XMLHttpRequest , consulte Usando XMLHttpRequest.

Métodos
-------

| `XMLHttpRequest(JSObject objParameters);` |
| --- |
| `void abort();` |
| `DOMString getAllResponseHeaders();` |
| `DOMString? getResponseHeader(DOMString header);` |
| `void open(DOMString method, DOMString url, optional boolean async, optional DOMString? user, optional DOMString? password);` |
| `void overrideMimeType(DOMString mime);` |
| `void send();` `void send(ArrayBuffer data);` `void send(Blob data);` `void send(Document data);` `void send(DOMString? data);` `void send(FormData data);` |
| `void setRequestHeader(DOMString header, DOMString value);` |
| Métodos não-padrão |
| `[noscript] void init(in nsIPrincipal principal, in nsIScriptContext scriptContext, in nsPIDOMWindow ownerWindow);` |
| `[noscript] void openRequest(in AUTF8String method, in AUTF8String url, in boolean async, in AString user, in AString password);` |
| `void sendAsBinary(in DOMString body);` |

Propriedades
------------

| Atributo | Tipo | Descrição |
| --- | --- | --- |
| `onreadystatechange` | `Function?` | 
 A função de objeto JavaScript que é chamado sempre que o atributo
 readyState sofre alteração. A função de callback é chamada a partir da
 thread existente na interface de usuário.


**Aviso:** Este não deve ser usado com chamadas síncronas
 e não deve ser utilizado a partir do código nativo.
  |
| `readyState` | `retorna o cabeçalho da requisição.` | 

|  |  |  |
| --- | --- | --- |
| Valor | Estado | Descrição |
| `0` | `UNSENT` | `open() não foi chamado ainda.` |
| `1` | `OPENED` | `send() não foi chamado ainda.` |
| `2` | `HEADERS_RECEIVED` | `send() foi chamado, e cabeçalhos e status estão
disponíveis.` |
| `3` | `LOADING` | Download; responseText contém dados parciais. |
| `4` | `DONE` | A operação está concluída. |

 |
| `response` | ArrayBuffer, Document,Blob, DOMString | 
 Retorna um objeto JavaScript de tipo
 `ArrayBuffer`, `Blob` ou
 `Document`, de acordo com o que estiver contido
 no `responseType.` Retorna
 `null` se a request não esteja completa ou não obteve
 sucesso.
  |
| `responseText` Somente leitura  | `DOMString` | 
 A resposta à *request*, em formato texto, retorna null se a
 solicitação não teve êxito ou que ainda não foi enviada.
  |
| `responseType` | `XMLHttpRequestResponseType` | Pode ser configurado para alterar o tipo de resposta.

|  |  |
| --- | --- |
| Valor | Tipo de dados de `resposta` de propriedade |
| `""` (string vazia) | String (este é o padrão) |
| `"arraybuffer"` | `ArrayBuffer` |
| `"blob"` | `Blob` |
| `"document"` | `Document` |
| `"json"` | 
 Objeto JavaScript, analisado a partir de uma seqüência de
 caracteres JSON retornado pelo servidor.
  |
| `"text"` | String |
| `"moz-blob"` | 
 Usado pelo Firefox para permitir recuperar dados parciais do
 tipo `Blob`,de eventos de progresso. Isso
 permite que o manipulador de eventos de progresso iniciar o
 processamento de dados enquanto ele ainda está sendo recebido.
  |
| `"moz-chunked-text"` | 
 Semelhante ao "text" , mas o *streaming* ainda está
 fluindo. Isto significa que o valor na response , só está
 disponível durante a expedição do "progress" do evento e
 contém apenas os dados recebidos desde a última "progress" do
 evento.


 Quando response é acessado durante um evento "progress", este
 contém uma string com os dados. Caso contrário, retorna null .

Este modo atualmente só funciona no Firefox. |
| `"moz-chunked-arraybuffer"` | 
 Semelhante ao `"arraybuffer"`, mas está fluindo.
 Isto significa que o valor na response , só está disponível
 durante a expedição do "progress" do evento e contém apenas os
 dados recebidos desde a última "progress" do evento.


 Quando response é acessado durante um "progress" evento que
 contém uma seqüência com os dados. Caso contrário, retorna
 null .

Este modo atualmente só funciona no Firefox.
. |

**Nota:** Começando com 11,0 Gecko (Firefox 11.0 / 11.0
 Thunderbird / SeaMonkey 2.8), bem como WebKit construir 528, esses
 navegadores não permitem que você use o atributo responseType ao
 executar solicitações síncronas. Tentativas de fazer isso geram uma
 exceção do tipo NS\_ERROR\_DOM\_INVALID\_ACCESS\_ERR. Esta mudança foi
 proposta para padronização junto à W3C.
  |
| `responseXML` Somente leitura  | `Document?` | 
 A resposta ao pedido como um DOM
 `Document`
 objeto, ou null se o pedido não foi bem sucedida, ainda não foi
 enviado, ou não pode ser analisado como XML ou HTML. A resposta é
 analisado como se fosse um `text/html` stream. Quando o
 responseType está definido para "document" e que a solicitação tenha
 sido feita de forma assíncrona, a resposta é analisado como se fosse
 um `text/html` stream.


**Nota:** Se o servidor não se aplica o text/xml
 cabeçalho Content-Type, você pode usar overrideMimeType() para forçar
 XMLHttpRequest para analisá-lo como XML de qualquer maneira.
  |
| `status` Somente leitura  | `unsigned short` | 
 O status de resposta da requisição. Este é o retorno do codigo da
 requisição HTTP (por exemplo, status é 200 qual a solicitação for
 bem-sucedida).
  |
| `statusText` Somente leitura  | `DOMString` | 
 A cadeia de resposta retornado pelo servidor HTTP. Ao contrário do
 status , o que inclui todo o texto da mensagem de resposta (" 200 OK ",
 por exemplo).
  |
| `timeout` | `unsigned long` | 
O número de milissegundos de um pedido pode tomar antes de ser
 automaticamente encerrada. Um valor de 0 (que é o padrão) significa
 que não há tempo limite.


**Nota:** Você não pode usar um tempo limite para
 solicitações síncronas com uma janela proprietária.
  |
| `upload` | `XMLHttpRequestUpload` | 
 O processo de upload pode ser rastreado através da ação de retorno de um
 evento para upload.
  |
| `withCredentials` | `boolean` | 
 Indica se ou não de cross-site Access-Control solicitações devem ser
 feitas usando credenciais, como cookies ou cabeçalhos de autorização.
 O padrão é false .

**Nota:** Esta não afeta as solicitações no mesmo local.

**Nota:** Começando com 11,0 Gecko (Firefox 11.0 / 11.0
 Thunderbird / SeaMonkey 2.8), Gecko não permite que você use os
 atributos withCredentials ao realizar solicitações síncronas. Ao
 tentar fazer isso o sistema gera uma exceção do tipo
 NS\_ERROR\_DOM\_INVALID\_ACCESS\_ERR.
  |

### Propriedades não-padrão

| Attribute | Type | Description |
| --- | --- | --- |
| `channel` Somente leitura  | `nsIChannel` | 
 O canal utilizado pelo objecto aquando da execução do pedido. Esta é
 null se o canal não foi criado ainda. No caso de um pedido de múltiplas
 partes, isto é o canal inicial, não as diferentes partes do pedido de
 várias partes.
 **Requer privilégios elevados para o acesso.** |
| `mozAnon` Somente leitura  | `boolean` | 
 Se for verdadeiro (true) o pedido será enviado sem cabeçalhos de
 cookies e autenticação.
  |
| `mozSystem` Somente leitura  | `boolean` | 
 Se for verdadeiro (true) , a política de mesma origem não será
 aplicada sobre o pedido.
  |
| `mozBackgroundRequest` | `boolean` | 
 Indica se o objeto representa uma solicitação de serviço de fundo. Se
 true , nenhum grupo carga está associada com o pedido, e diálogos de
 segurança estão impedidos de ser mostrado para o usuário.
 **Requer privilégios elevados para o acesso.**

 Nos casos em que uma caixa de diálogo de segurança (como a
 autenticação ou uma notificação certificado ruim) normalmente seriam
 mostrados, o pedido simplesmente falhar em seu lugar.


**Nota:** Esta propriedade deve ser definida antes de
 chamar open().
  |
| `mozResponseArrayBuffer`
Somente leitura  | `ArrayBuffer` | 
 A resposta ao pedido, como uma matriz de JavaScript digitado. Esta é
 NULL se o pedido não foi bem-sucedida, ou se não foi enviada ainda.
  |
| `multipart` | `boolean` | 
**Este Gecko somente recurso foi removido no Firefox / Gecko
22.**
 Por favor Utilize
 Server-Sent Events (en-US),
 Web Sockets
 ou `responseText` de eventos de progresso em seu lugar.


 Indica se ou não a resposta está prevista para ser uma corrente de,
 possivelmente, vários documentos XML. Se definido como true , o tipo
 de conteúdo da resposta inicial deve ser multipart/x-mixed-replace ou
 ocorrerá um erro. Todos os pedidos devem ser assíncrona.


 Isso permite o suporte para servidor push; para cada documento XML que
 está escrito a este pedido, um novo documento XML DOM é criado eo
 onload manipulador é chamado entre os documentos.


**Nota:** Quando este estiver definido, o onload
 manipulador e outros manipuladores de eventos não são repostas após a
 primeira XmlDocument é carregado, eo onload manipulador é chamado após
 cada parte da resposta é recebida.
  |

Construtor
----------

### XMLHttpRequest()

O construtor inicia um XMLHttpRequest. Ele deve ser chamado antes de quaisquer outras chamadas de método.

Gecko/Firefox 16 acrescenta um parâmetro não-padrão para o construtor que pode ativar o modo anônimo (veja Bug 692677). Definir o mozAnon bandeira de true eficácia se assemelha a `AnonXMLHttpRequest()` construtor descrito na especificação XMLHttpRequest que não tenha sido implementado em qualquer navegador ainda (em setembro de 2012).
```

XMLHttpRequest (
  JSObject objParameters
);
```


##### Parâmetros (não-padrão)

`objParameters`

Há dois sinalizadores que você pode definir:

`mozAnon`

Boolean: Definir esse sinalizador de true fará com que o navegador para não expor a origem e as credenciais do usuário ao buscar recursos. Mais importante, isto significa que os cookies não será enviado a menos que explicitamente adicionado usando setRequestHeader.

`mozSystem`

Boolean: Definir esse sinalizador de true . permite fazer conexões entre sites sem a necessidade de o servidor para opt-in usando CORS requer a configuração mozAnon: true . Ou seja, este não pode ser combinada com o envio de cookies ou outras credenciais do usuário. Isso\* só funciona em privilegiados (revisto) Apps;ele não funciona em páginas da web arbitrários carregados no Firefox.\*


Métodos
-------

### abort()

Aborta o pedido, se já foi enviada.

### getAllResponseHeaders()
```

DOMString getAllResponseHeaders();
```


Retorna todos os cabeçalhos de resposta como uma string, ou null se nenhuma resposta foi recebida. **Nota:** Para os pedidos de várias partes, isso retorna os cabeçalhos da parte atual da solicitação, não a partir do canal original.

### getResponseHeader()
```

DOMString? getResponseHeader(DOMString header);
```


Retorna a string contendo o texto do cabeçalho especificado, ou null se quer a resposta ainda não foi recebida ou o cabeçalho não existe na resposta.

### open()

Inicializa um pedido. Este método é para ser usado a partir do código JavaScript; para inicializar um pedido do código nativo, use `openRequest()` em seu lugar.

**Nota:** Chamar esse método uma solicitação já está ativo (aquele para o qual open() ou openRequest() já foi chamado) é o equivalente de chamar abort().
```

void open(
   DOMString method,
   DOMString url,
   optional boolean async,
   optional DOMString user,
   optional DOMString password
);
```


###### Parameters

`method`

O método HTTP para usar, como "GET", "POST", "PUT", "DELETE", etc. ignorado para URLs não-HTTP (S).

`url`

O URL para o qual enviar a solicitação.

`async`

Um parâmetro booleano opcional, por padrão true , indicando se a operação deve ou não ser executada de forma assíncrona. Se esse valor for false , o send() método não retorna até que a resposta seja recebida. Se true , a notificação de uma transação concluída é fornecida usando ouvintes de evento. Isso deve ser true se o multipart atributo for true , ou uma exceção será lançada.

`user`

O nome de usuário opcional para usar para fins de autenticação; por padrão, essa é uma seqüência vazia.

`password`

A senha opcional para usar para fins de autenticação; por padrão, essa é uma seqüência vazia.

### overrideMimeType()

Substitui o tipo de MIME retornado pelo servidor. Isto pode ser utilizado, por exemplo, para forçar uma corrente a ser tratada e analisada como text/xml, mesmo que o servidor não relatam como método. Este método deve ser chamado antes send() .
```

void overrideMimeType(DOMString mimetype);
```

### send()

Envia a solicitação. Se o pedido é assíncrono (que é o padrão), este método retorna assim que o pedido for enviado. Se o pedido é síncrono, este método não retorna até a resposta chegar.

**Nota:** Qualquer ouvintes de eventos que pretende definir tem de ser definida antes de chamar send().
```

void send();
void send(ArrayBuffer data);
void send(Blob data);
void send(Document data);
void send(DOMString? data);
void send(FormData data);
```


###### Notas

Se os dados são um Document , ele é serializado antes de serem enviados. Ao enviar um documento, as versões do Firefox antes da versão 3 sempre enviavam a solicitação usando codificação UTF-8; Firefox 3 envia corretamente o documento usando a codificação especificada por body.xmlEncoding , ou UTF-8 se nenhum encoding é especificado.

Se são uma nsIInputStream , deve ser compatível com nsIUploadChannel 's setUploadStream() método. Nesse caso, um cabeçalho Content-Length é adicionado ao pedido, com o seu valor obtido usando nsIInputStream 's available() método. Quaisquer cabeçalhos incluídos na parte superior da corrente são tratados como parte do corpo da mensagem. MIMEType da transmissão deve ser especificado definindo o cabeçalho Content-Type usando o `setRequestHeader()` método antes de chamar send().

A melhor maneira de enviar conteúdo binário (como em arquivos de upload) está usandoArrayBuffers (en-US) ou Blobs (en-US) em conjuncton com o send() método. No entanto, se você quiser enviar uma stringifiable (en-US) dados brutos, use o `sendAsBinary()` método em vez disso.

### setRequestHeader()

Define o valor de uma solicitação HTTP header. Você deve chamar setRequestHeader() após open() , mas antes de send().
```

void setRequestHeader(
   DOMString header,
   DOMString value
);
```


###### Parametros

`header`

O nome do cabeçalho cujo valor deve ser definido.

`value`

O valor definido como o corpo do cabeçalho.

### Métodos não-padrão

#### init()

Inicializa o objeto para uso a partir do código C ++.

**Aviso:** **Nota:** Este método não deve ser chamado a partir do JavaScript.
```

[noscript] void init(
   in nsIPrincipal principal,
   in nsIScriptContext scriptContext,
   in nsPIDOMWindow ownerWindow
);
```


##### Parametros

`principal`

O principal a ser usado para o pedido; não deve ser null.

`scriptContext`

O contexto de script a ser usada para o pedido; não deve ser null.

`ownerWindow`

A janela associada com o pedido; pode ser `null`.

#### openRequest()

Inicializa um pedido. Este método é para ser usado a partir do código nativo; para inicializar um pedido do código JavaScript, usar `open() em seu lugar. Consulte a documentação do open() .`

#### sendAsBinary()

Uma variante do send() método que envia dados binários.
```

void sendAsBinary(
   in DOMString body
);
```


Este método, usado em conjuncton com o `readAsBinaryString` (en-US) método do `FileReader` (en-US) API tornar possível read and **upload** any type of file (en-US) e para stringify (en-US) os dados brutos.

##### Parametros

`body`

O corpo da solicitação como um DOMString. Estes dados poderão ser convertidos para uma seqüência de caracteres de byte único por truncamento (removendo o byte de mais alta ordem de cada personagem).

##### `sendAsBinary()` polyfill

Desde sendAsBinary() é um recurso experimental, aqui está uma polyfill para navegadores que não suportam o sendAsBinary() método, mas o apoio typed arrays (en-US).


```js
/\*\
|\*|
|\*| :: XMLHttpRequest.prototype.sendAsBinary() Polifyll ::
|\*|
|\*| https://developer.mozilla.org/pt-BR/docs/DOM/XMLHttpRequest#sendAsBinary()
|\*|
\\*/

if (!XMLHttpRequest.prototype.sendAsBinary) {
  XMLHttpRequest.prototype.sendAsBinary = function (sData) {
    var nBytes = sData.length,
      ui8Data = new Uint8Array(nBytes);
    for (var nIdx = 0; nIdx < nBytes; nIdx++) {
      ui8Data[nIdx] = sData.charCodeAt(nIdx) & 0xff;
    }
    /\* send as ArrayBufferView...: \*/
    this.send(ui8Data);
    /\* ...or as ArrayBuffer (legacy)...: this.send(ui8Data.buffer); \*/
  };
}
```


**Nota:** É possível construir este polyfill colocar dois tipos de dados como argumento para send() : um `ArrayBuffer` (en-US) (ui8Data.buffer - o código comentado) ou um ArrayBufferView ( ui8Data , que é uma typed array of 8-bit unsigned integers (en-US) – descomentada código). No entanto, no Google Chrome, quando você tenta enviar uma ArrayBuffer , a seguinte mensagem de aviso aparecerá: ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead. ArrayBuffer is deprecated in XMLHttpRequest.send(). Use ArrayBufferView instead.

Notas
-----

* Por padrão, o Firefox 3 limita o número de XMLHttpRequest conexões por servidor a 6 (versões anteriores limitar esta para 2 por servidor). Alguns sites interativos podem manter um XMLHttpRequest conexão aberta, de modo que a abertura de várias sessões para esses sites pode resultar no navegador pendurado de tal forma que a janela já não repaints e controles não respondem. Este valor pode ser alterado através da edição do network.http.max-persistent-connections-per-server preferência no `about:config`.
* Do Gecko 7 cabeçalhos estabelecidos pela setRequestHeader asão enviados com o pedido, quando na sequência de um redirecionamento. Anteriormente, estes cabeçalhos não iria ser enviado.
* `XMLHttpRequest é implementado em Gecko usando os` `nsIXMLHttpRequest`, `nsIXMLHttpRequestEventTarget`, e `nsIJSXMLHttpRequest` interfaces.

#### Eventos

`onreadystatechange` como uma propriedade do `XMLHttpRequest` instância é suportado em todos os navegadores.

Desde então, foram implementadas uma série de manipuladores de eventos adicionais em vários navegadores ( onload , onerror , onprogress , etc.). Estes são suportados no Firefox. Em particular, veja `nsIXMLHttpRequestEventTarget` and Using XMLHttpRequest.

avegadores mais recentes, incluindo o Firefox, também suporta ouvir as XMLHttpRequest eventos via padrão `addEventListener` APIs Além de definir on propriedades para uma função de manipulador.

Especificações
--------------

| Specification |
| --- |
| XMLHttpRequest Standard # interface-xmlhttprequest |

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Veja também
-----------

* MDN artigos sobre XMLHttpRequest:
    + AJAX - Getting Started
    + Using XMLHttpRequest
    + HTML in XMLHttpRequest
    + `FormData`
* XMLHttpRequest referencias da W3C e navegador fornecedores:
    + W3C: XMLHttpRequest (base features)
    + W3C: XMLHttpRequest (latest editor's draft with extensions to the base functionality, formerly XMLHttpRequest Level 2
    + Microsoft documentation
    + Apple developers' reference
* "Using the XMLHttpRequest Object" (jibbering.com)
* XMLHttpRequest - REST and the Rich User Experience
* HTML5 Rocks - New Tricks in XMLHttpRequest2