IFrames faz um transporte apropriado para chamadas assíncronas porque podem carregar o índice sem fazer com que a página inteira recaregue, e os elementos novos de IFrame podem ser criados usando o Javascript. O atributo o mais agradável sobre um IFrame é que um formulário pode usar um como seu alvo, recarregando esse IFrame em vez da página inteira; esta aproximação permite que as quantidades grandes de dados sejam emitidas ao usuário usando o BORNE.
|
|
Uma dificuldade em usar um IFrame como um transporte é que a página que nós somos carregamento necessita ser HTML, e necessita ter um alimentador do evento do onload do Javascript para dizer o original do pai quando é carregamento feito. Esta necessidade força todos os pedidos que estão sendo feitos com o IFrames a ser feito às páginas projetadas tratar dos pedidos de IFrame. (o código não pode apenas agarrar uma lima de XML na maneira que XMLHttpRequest permite.)
Anote que o uso de IFrames tem um número de limitações mais adicionais:
Uma vantagem que um IFrame tem XMLHttpRequest excedente é que pode ser usada fazer uploads da lima. devido às limitações da segurança do browser, somente ações do usuário, tais como estalar um formulário, pode interagir com as limas na máquina do usuário. Isto faz a escolha de objectivos de um formulário a um IFrame a única opção para os uploads da lima que não envolvem um ciclo normal do reload do BORNE e da página do formulário. Entretanto, não há nenhuma razão que você não pode cair para trás a usar um IFrame para uploads da lima e XMLHttpRequest para o descanso de seus pedidos de AJAX. A menos que você estiver fazendo pedidos remotos do scripting-estilo AJAX, trabalhar em torno das limitações de IFrame adicionará uma quantidade significativa de trabalho a todo o projeto do desenvolvimento de AJAX.
Para começar a compatibilidade máxima com browsers mais velhos, você poderia apenas adicionar o IFrame a seu HTML e dar-lhe um tamanho de 0x0. (você não pode apenas o esconder, ou alguns browsers não o carregarão.) Entretanto, esta aproximação não é flexível, assim que você quererá criar dinâmicamente o frame. Não todos os browsers mais velhos suportam document.createElement, mas os browsers sem essa sustentação faltarão geralmente as outras potencialidades dinâmicas necessitadas usar os dados que você está carregando, assim que é a mais melhor fornecer-lhes a sustentação com uma versão de estática do HTML da página. No seguinte exemplo, o IFrame é criado usando o innerHTML porque é mais simples do que criando o que usa métodos de DOM. Nota, entretanto, que poderia também ser criada com o document.createElement, apenas como o div a que se está adicionando:
1 rDiv do var = document.createElement('div ');
2 rDiv.id = ' remotingDiv ';
estilo de 3 var = ' border:0;width:0;height:0;';
4 rDiv.innerHTML = "";
6
7 document.body.appendChild(rDiv);
Se você quiser fazer somente um pedido COMEÇAR, você pode mudar o valor da propriedade do src do IFrame, mas para fazer o BORNE, você necessita usar um formulário alvejado. COMECE não é uma solução boa para pedidos de AJAX para duas razões: pode emitir somente uma quantidade limitada de dados (uma quantidade que mudam dependendo do browser), e COMEÇA pode cached e/ou preloaded por usuários do proxy, assim que você nunca quer usá-lo executar uma ação tal como atualizar sua base de dados.
Usar um formulário com um IFrame é fácil. Justo o jogo o atributo do alvo do formulário, e quando você submete o formulário, o resultado carrega no IFrame. O seguinte exemplo cría nosso formulário e ajusta seus alvos ao IFrame que nós criamos mais cedo "criar na seção de um IFrame escondido" do artigo:
1 rDiv.form = document.createElement('form ');
2 rDiv.form.setAttribute('id ', id+'RemotingForm ');
3 rDiv.form.setAttribute('action ', URL);
4 rDiv.form.setAttribute('target ', identificação);
5 rDiv.form.target = identificação;
6 rDiv.form.setAttribute('method ', ' borne ');
7 rDiv.form.innerHTML = '
8 id="'+id+'Data" > ';
A única maneira saber que o índice do IFrame carregou deve ter a página satisfeita funciona algum Javascript que notifica a página do pai em que o IFrame é encaixado. A maneira a mais simples fazer isto deve ajustar o alimentador do evento do onload no original que você está carregando. Esta limitação significa que você não pode usar um IFrame para o índice arbitrário do carregamento como você pode com XMLHttpRequest. Entretanto, é ainda útil para os casos em que uma única página do usuário está sendo usada já como uma passagem de AJAX. Está aqui um exemplo do onload:
Um exemplo cheio de um IFrame que AJAX peça inclui duas partes. A primeira parte é o código do cliente-lado para criar o IFrame e o formulário. A segunda parte é o código do usuário-lado, que prepara alguns dados e os emite para trás ao original do pai em seu alimentador do evento do onload.
A primeira parte do exemplo (a lista 1) é o código do Javascript em uma lima simples do HTML. Esta página é usada testando; a função da rechamada alerta apenas os índices dos resultados. A segunda parte do exemplo (a lista 2) é um certificado simples de PHP, que faça exame dos dados do BORNE e os emita para trás ao original do pai. Para fazer um sistema útil, você pôde também querer incluir algumas variáveis extra no formulário, que diria ao código de PHP o que fazer com os dados uploaded, ou você poderia pôr a lógica diretamente no certificado e usar uma página diferente do alvo para cada tarefa que você quis realizar.
Alistando 1. Fazendo um pedido de AJAX usando um IFrame
| 1 2 3 50 51 52 53 54 teste 55 56 57 58 |
Alistar 1 é composto de três funções:
A função do createRemotingDiv (linhas 5 - 28) combina o código previamente descrito para criar um IFrame escondido com o código para criar um formulário para submeter-se lhe. Quando o formulário é criado, está alvejado de encontro ao IFrame recentemente criado, fazendo ao uso da submissão do formulário o em vez de recarregar a página atual. Mostrar o IFrame durante o desenvolvimento é frequentemente útil no processo eliminar erros de modo que você possa ver toda a saída gerada pela página que você se está chamando. Você pode fazer este editando o estilo na linha 8 e mudando o a width:200;height:200;.
A função a mais sendRequest (linhas 30 - 40) faz um pedido de AJAX. Faz exame do URL a que para fazer o pedido, um payload emitir ao usuário, e uma função da rechamada ao funcionamento quando o pedido está completo. A função usa o createRemotingDiv ajustar acima o processo (linhas 31-34). Então os updates os mais sendRequest a ação no formulário de IFrame (linha 35), adicionam o valor do payload no formulário, e submetem o formulário usando o IFrame. Quando a página nova é carregada no IFrame, o original novo usa um alimentador do onload do Javascript chamar a função da rechamada que foi passada no método o mais sendRequest. A página de PHP que processa o BORNE do formulário e cría o Javascript do onload é mostrada na lista 2
Alistando 2. Página do usuário de PHP que segura um pedido de IFrame AJAX
| 1 2 3 8 9 onload 10 = 11 "parent.document.getElementById('remotingDiv').callback(result)" > 12 13 |
No lado do usuário, o formulário é processado e a saída é criada no formulário de um HTML page. A maneira a mais simples adicionar dados novos deve gerar o Javascript que contem os dados novos. Neste caso, nós somos justos ecoando os dados para trás ao cliente pondo o na variável do resultado (linhas 4-6). Normalmente, você será código running do usuário-lado aqui e outputting uma corda (como neste caso) ou adicionando o código novo do Javascript ao funcionamento de encontro ao original do pai. A função da rechamada no pai é chamada pelo alimentador do onload no Tag do corpo (linha 11).
Online: 560 users browsing the articles directory
|
|