Colocar XMLHttpRequest em uma fábrica

Gerenciamento de Tempo Behavioral Código

  

Problema Você deseja efetivamente gerenciar e depurar o código runtime comportamental. Teoria usando a palavra-chave eval ou dinamicamente atribuir funções ao objeto de imóveis é uma grande parte da programação dinâmica. Programação dinâmica envolve o código que exibe um comportamento em tempo de execução, ou código de comportamento. Código de comportamento não é uma má idéia, mas ela faz para depuração mais complicado. O principal problema com o código de comportamento é que o depurador não tem idéia de qual a fonte que está depurando. Solução Há várias soluções que você pode considerar aqui estão eles em breve:

• Implementar teste de desenvolvimento orientado e executar testes detalhados de forma incremental. Fazer outra irá causar erros a serem gerados em pedaços de código que não tem problemas. Ao longo deste artigo, as receitas utilização test-drive de técnicas de desenvolvimento que você pode inspecionar a compreender como funciona o código. Eu aconselho que você tome um momento agora para descobrir como o código é escrito, se você ainda não o tenham feito. Dê uma olhada nestes arquivos, por exemplo: / site / ROOT / ajaxrecipes / javascript / conventions.html, o site / / root / ajaxrecipes / javascript / proxy.html e / website / ROOT / ajaxrecipes / javascript / variablebehavior.html.

• Gerar o código em um buffer que é despejado na caixa de texto HTML. Pegue o código de dumping e colá-lo em uma página HTML para a execução. O código objecto irá conter o erro que pode ser depurado. Esta solução só é aconselhável, no entanto, se você está tendo problemas persistentes e não consegue encontrar a fonte.

• Use princípios simples. Eu gosto de código dinâmico e gerado tanto como qualquer outra pessoa, mas quero ficar longe de código que é muito inteligente e tenta resolver muitos problemas de uma vez. Por exemplo, eu normalmente escrevo código detalhado e não combinar vários operadores em uma única instrução .

• Utilize um depurador. Mozilla e Firefox têm depuradores razoavelmente decente, e você deve usá-los. Com o Microsoft Visual Studio 2005, é possível a depuração muito complicado código JavaScript.

Colocar XMLHttpRequest em uma fábrica

Você quer colocar XMLHttpRequest em uma fábrica. Teoria Quando você estiver usando XMLHttpRequest, o problema é como instanciar XMLHttpRequest. Cada navegador tem um jeito diferente de instanciar XMLHttpRequest. Aqui está o Mozilla ea maioria dos outros usam navegadores (este código também irá funcionar no Internet Explorer a partir da versão 7): var xmlhttp = new XMLHttpRequest (); Você usa o seguinte código-fonte para as versões do Internet Explorer 7 antes: var xmlhttp = new ActiveXObject ( 'Microsoft.XMLHTTP'); O buffer Microsoft.XMLHTTP é um identificador geral, como existem especializações disponíveis, dependendo do navegador. Solução A resposta mais curta para o problema é que para instanciar XMLHttpRequest você precisa usar técnicas diferentes em diferentes navegadores. Para ser capaz de instanciar o objeto XMLHttpRequest, você precisa criar uma abstração. A abstração poderia ser uma classe ou uma função, mas que você escolher não importa. O que importa é que você cria uma abstração ou implementar a Fábrica pattern.1 Na implementação padrão de fábrica, o principal desafio é identificar qual navegador está sendo executado o script e então usar a instanciação XMLHttpRequest adequado. Jsolait As bibliotecas, Prototype, Yahoo! padrões e Dojo Toolkit todos implementar uma abstração XMLHttpRequest que é codificada da mesma maneira. Para ilustrar a essência de como ele é codificado considerar o seguinte código-fonte, que é do Yahoo! Design Pattern Library (http://developer.yahoo.com/ypatterns).

createXhrObject: function (transactionId) (var obj, http; try (/ / Instancia XMLHttpRequest em navegadores não-IE e atribui a http. http = new XMLHttpRequest ();/ / Objeto literal com http e propriedades id obj = (conn: http, TID: transactionId)) catch (e) (for (var i = 0; i http = new ActiveXObject (this._msxml_progid [i]);/ / Objeto literal com http e propriedades id obj = (conn: http, TID: transactionId)) catch (e) ())) finally (return obj;))

As instanciações são envolvidos em uma série de tentar travar blocos. A tentar travar bloco em JavaScript é um bloco de exceção. A idéia por trás desta forma de abstração é que você tente executar algum código fonte, e se não fizer outra coisa. As seguintes etapas são realizadas no código fonte:

1. Digite o primeiro bloco de exceção.

2. Executar o XMLHttpRequest instanciação usando a nova palavra-chave.

3. Se as obras instanciação, em seguida, o bloco finally é atingido.

4. Se a instanciação falhar, uma exceção é gerada eo bloco catch inicia um ciclo.

5. O laço tentativas de instanciar o Internet Explorer XMLHttpRequest usando identificadores diferentes referenciada pelo membro de dados this._msxml_progid.

6. Se o objeto XMLHttpRequest não pode ser instanciado, um bloco catch vazio captura a exceção.

7. Independentemente do que acontecer, o bloco finally é executado e retorna a instância do objeto armazenado na variável obj. A idéia principal da abstração é executar o código, e se o navegador não suporte a funcionalidade, é gerada uma exceção. A exceção é capturada e causa uma seqüência de instanciação de diferentes a começar. O que me preocupa neste código é que ele não tenta descobrir o que é suportado, mas utiliza exceções JavaScript. À medida que a execução está, é gerada uma exceção para amajority dos casos. Isso ocorre porque, no momento da redação deste texto, o Internet Explorer tem uma quota de mercado superior a 80%. Isto significa que a tentativa de criar uma instância usando o XMLHttpRequest nova palavra-chave não vai funcionar e irá gerar uma exceção. A forma alternativa de instanciar XMLHttpRequest é utilizada pela biblioteca Jaxson, conforme descrito nos artigos Ajax em Ação (Manning, 2005) e Professional Ajax (Wrox, 2006). A técnica mostrada no Ajax em Ação é perfect2 e é implementada por Jaxson como se segue.

 Fonte: / website / root / scripts / communications.js if (window.ActiveXObject) (FactoryXMLHttpRequest = function () (return new ActiveXObject ( "Microsoft.XMLHTTP");) else if (window.XMLHttpRequest) (FactoryXMLHttpRequest = function () (return new XMLHttpRequest ();)) throw new Error ( "Could not instantiate XMLHttpRequest");

Nota Para instanciar o objeto XMLHttpRequest no Internet Explorer, uma única linha de código-fonte é usada. Em contrapartida, outras bibliotecas usar tentativas instanciação múltipla. Essas tentativas instanciação múltipla não são necessários porque, por a documentação da MSDN, só é necessário usar a seqüência Microsoft.XMLHTTP no Internet Explorer versão 6 e abaixo. Quando instanciar o objeto XMLHttpRequest, manter os seguintes pontos em mente:

• Você vai precisar usar uma abstração, porque as pessoas vão continuar a usar as versões mais antigas do Internet Explorer há algum tempo para vir. Assim, você ainda terá a necessidade de descobrir qual a técnica instanciação de usar.

• Você não deve usar exceções para testar a funcionalidade esperada. Fazer isso sem pensar fará exceções para ser escondido.

• A melhor abordagem é para testar a funcionalidade e, em seguida, instanciar o exemplo XMLHttpRequest.

• Tudo o que disse, se você usar uma instanciação predefinida que utiliza exceções, como o Yahoo! Design Pattern Library, que não é o fim do mundo. O ponto de esta receita é para sugerir uma melhor abordagem para usar sempre que possível.

um artigo submetido por Sonja Lande


Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre.
Importante: Este artigo "Putting XMLHttpRequest em uma fábrica" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.


Online: 352 users browsing the articles directory