Originalmente, Microsoft projetou XMLHttpRequest permitir que o Internet Explorer (IE) carregue originais de XML do Javascript. Mesmo que tenha XML em seu nome, XMLHttpRequest é realmente um cliente genérico do HTTP para o Javascript. Com ele, o Javascript pode fazer PARA COMEÇAR e AFIXAR pedidos do HTTP. (para pedidos do BORNE, os dados podem ser emitidos ao usuário em um formato de seu escolher.) As limitações principais a XMLHttpRequest são devido ao sandbox da segurança do browser. Pode fazer somente pedidos de HTTP(S) (a lima URLs, para o exemplo, não trabalho), e pode fazer pedidos somente ao mesmo domínio que a página atualmente carregada.
|
|
As limitações da segurança de XMLHttpRequest limitam as maneiras em que você pode o usar, mas o trade-off na segurança adicionada é bom worth ele. A maioria de ataques de encontro às aplicações do Javascript centram-se em torno do código malicioso injetando no Web page. Se XMLHttpRequest permitisse pedidos a qualquer Web site, assentaria bem em um jogador principal nestes ataques. O sandbox da segurança reduz estes problemas potenciais. Além, simplifica o modelo de programação porque o código do Javascript pode implicitamente confiar em todos os dados que carregar de XMLHttpRequest. Pode confiar nos dados porque os dados novos são tão seguros justo quanto a página que carregou a página inicial.
Apesar do fato que XMLHttpRequest fornece somente um API pequeno e apenas um punhado dos métodos e das propriedades, tem suas diferenças entre browsers. Estas diferenças estão principalmente no evento que segura e objetam o instantiation (no IE, XMLHttpRequest é realmente um objeto de ActiveX), assim que não são duras de trabalhar ao redor. Na seguinte vista geral do XMLHttpRequest API, a sintaxe de Mozilla para o instantiation de XMLHttpRequest é usada. Se você quiser funcionar os exemplos no IE, você necessita substituir XMLHttpRequest() novo; com um ou outro ActiveXObject("MSXML2.XMLHTTP.3.0 novo"); ou o método cheio do instantiation do cruz-cross-browser mostrado do "na seção de XMLHttpRequest Cruz-cross-Browser" deste artigo.
XMLHttpRequest é o método mais-usado para comunicações de AJAX porque fornece duas características originais. A primeira característica fornece a abilidade de carregar o índice novo sem esse índice que está sendo mudado em toda a maneira, que fizer extremamente fácil de caber AJAX em seus testes padrões normais do desenvolvimento. A segunda característica permite que o Javascript faça chamadas synchronous. Uma chamada synchronous para todas operações restantes até que esteja completa, e quando esta não for uma opção que esteja usada geralmente, pode ser útil nos casos em que o pedido atual deve ser terminado antes que umas ações mais adicionais estejam feitas exame.
O método aberto é usado ajustar o tipo do pedido (COMECE, AFIXE, POSTO, ou PROPFIND), o URL da página que está sendo pedida, e se a chamada será assíncrona. Um username e uma senha para o authentication do HTTP podem também opcionalmente ser passados. O URL pode ser um trajeto relativo (tal como page.html) ou completo que inclui o endereço do usuário (tal como http://blog.joshuaeichorn.com/page.html). A assinatura básica do método é:
No ambiente do Javascript, as limitações da segurança estão no lugar. Estas limitações da segurança fazem com que o método aberto jogue uma exceção se o URL for de um domínio diferente do que a página atual. Os seguintes usos do exemplo abertos ao jogo acima um synchronous COMEÇAM o pedido a index.html:
O método da emissão faz a conexão ao URL especificada em aberto. Se o pedido for assíncrono, a chamada retorná-lo-á imediatamente; se não, a chamada obstruirá uma execução mais adicional até que a página downloaded. Se o tipo do pedido for BORNE, o payload estará emitido como o corpo do pedido que é emitido ao usuário. A assinatura do método é:
Quando você faz um pedido do BORNE, você necessitará ajustar o Índice-tipo encabeçamento. Esta maneira, o usuário sabe o que fazer com o índice uploaded. Ao imitador que emite um formulário usando o BORNE do HTTP, você ajustou o tipo satisfeito a application/x-www-form-urlencoded. Os dados de URLencoded são o mesmo formato que você vê em um URL após "?". Você pode ver um exemplo destes dados codificados fazendo um formulário e ajustando seu método PARA COMEÇAR. O seguinte exemplo mostra um pedido synchronous do BORNE a index.php que está emitindo um payload de URLencoded. Se index.php contiver < o?php var_dump($_POST); ? >, você pode ver os dados submetidos traduzidos como se é um formulário normal no alerta:
Há muitos casos diferentes em que ajustar um encabeçamento em um pedido pôde ser útil. O uso o mais comum do setRequestHeader() deve ajustar o Índice-tipo, porque a maioria de aplicações da correia fotorreceptora sabem já tratar de determinados tipos, tais como URLencoded. A assinatura do método do setRequestHeader faz exame de dois parâmetros: o encabeçamento a ajustar-se e seu valor:
Porque os pedidos emitidos usando XMLHttpRequest emitem os mesmos encabeçamentos padrão, including encabeçamentos do bolinho e encabeçamentos do authentication do HTTP, como um pedido normal do browser, o nome do encabeçamento será geralmente o nome do encabeçamento do HTTP que você quer cancelar. Além aos encabeçamentos cancelando do defeito, o setRequestHeader é útil para ajustar o costume, encabeçamentos application-specific. Os encabeçamentos feitos sob encomenda são prefixados geralmente com o x para distingui-los do padrão uns. O seguinte exemplo faz um synchronous COMEÇAR o pedido que adiciona um encabeçamento chamado X-foo a test.php. Se test.php contiver < o?php var_dump($_SERVER); ? >, você verá o encabeçamento submetido no alerta:
O método do geTResponseHeader permite que você comece um único encabeçamento da resposta; isto é especial útil quando tudo que você necessita é um encabeçamento como o Índice-tipo; anote que o encabeçamento especificado é caixa-case-insensitive. A assinatura do método é como segue:
os getAllResponseHeaders retornam todos os encabeçamentos da resposta em uma única corda; isto é útil para eliminar erros ou procurarar por um valor. O seguinte exemplo faz um synchronous COMEÇAR o pedido a test.html. Quando o cliente recebe uma resposta, o Índice-tipo está alertado e todos os encabeçamentos são alertados:
Todos os browsers executam um método do abort(), que seja usado cancelar um pedido assíncrono in-progress. (um exemplo deste é mostrado "emitindo na seção dos pedidos assíncronos" neste artigo.) os browsers Mozilla-baseados oferecem também alguns métodos extra no alto do API básico; por exemplo, o addEventListener() e o removeEventListener() fornecem uma maneira travar eventos do status sem usar sobre * as propriedades. Há também um método do overrideMimeType() que makes ele possível forçar o Índice-tipo a text/xml de modo que esteja analisado gramaticalmente em um original de DOM mesmo se o usuário não o relata como esta'. Os métodos Mozilla-específicos podem ser úteis em determinadas circunstâncias, mas em a maioria de casos, você deve permanecer afastado deles porque não todos os browsers os suportam.
XMLHttpRequest fornece um número de propriedades que fornecem a informação ou os resultados sobre o pedido. A maioria das propriedades são evidentes; você lê simplesmente o valor e age nele. Sobre * as propriedades são os alimentadores do evento que são usados atribuindo uma função a elas. Uma lista de todas as propriedades segue:
Nota
Mozilla restaura alimentadores do evento, tais
como o onreadystatechange, depois que um pedido é terminado, assim
que você necessita restaurá-los se você estiver fazendo chamadas
múltiplas com o mesmo objeto.
A seguinte tabela mostra os valores possíveis para a variável do readyState. Retornará um número que representa o estado atual do objeto. Cada pedido progredirá através da lista dos readyStates
| código de status do readyState | Status do objeto de XMLHttpRequest |
|---|---|
| (0) UNINITIALIZED | O objeto foi criado mas não inicializado. (o método aberto não foi chamado.) |
| (1) CARREGAR | O objeto foi criado, mas o método da emissão não foi chamado. |
| (2) CARREGADO | O método da emissão foi chamado, mas o status e os encabeçamentos não estão ainda disponíveis. |
| (3) INTERATIVO | Alguns dados foram recebidos. Chamar as propriedades responseBody e do responseText neste estado para obter resultados parciais retornará um erro, porque os encabeçamentos do status e da resposta não estão inteiramente disponíveis. |
| (4) TERMINADO | Todos os dados foram recebidos, e os dados completos estão disponíveis nas propriedades responseBody e do responseText. |
O readyState variável e o alimentador do evento do onreadystatechange são ligados de tal maneira que cada vez que a variável do readyState é mudada, o alimentador do evento do onreadystatechange é chamado.
Online: 530 users browsing the articles directory
|
|