Mettre XMLHttpRequest dans une usine

Gérer Durée Behavioral Code

  

Problème Vous voulez gérer efficacement et déboguer votre code de comportement des exécutables. Théorie utilisation du mot clé eval ou de l'attribuer dynamiquement à des fonctions aux propriétés d'objet est une grande partie de la programmation dynamique. La programmation dynamique comporte un code qui présente un comportement à l'exécution, ou Behavioral Code. Code comportemental n'est pas une mauvaise idée, mais il ne rend le débogage pour plus compliquée. Le principal problème avec le code de comportement est que le débogueur n'a aucune idée de quelle source il est le débogage. Solution Il ya plusieurs solutions, vous pouvez considérer ici ils sont en bref:

• Test-Driven Development Mettre en œuvre et d'effectuer des contrôles approfondis de manière incrémentielle. Agir autrement entraînerait des erreurs de se produire lors des morceaux de code qui n'ont pas de problèmes. Tout au long de cet article, recettes utilisation piloté par les tests techniques de développement que vous pouvez consulter pour comprendre comment fonctionne le code. Je vous conseille fortement de prendre un moment pour explorer comment le code est écrit, si vous n'avez pas déjà fait. Jetez un œil à ces fichiers, par exemple: / site / ROOT / ajaxrecipes / javascript / conventions.html, / site / ROOT / ajaxrecipes / javascript / proxy.html, et / site / ROOT / ajaxrecipes / javascript / variablebehavior.html.

• Générer le code dans une mémoire tampon qui est exportée vers la boîte de page de texte HTML. Prendre le code sous-évaluées et collez-le dans une page HTML pour l'exécution. Le code de dumping contiendra l'erreur qui peut être débogué. Cette solution est seulement souhaitable, cependant, si vous rencontrez des problèmes persistants et ne peut pas trouver la source.

• Utilisez des principes simples. J'aime dynamique et le code généré autant que n'importe qui d'autre, mais je reste loin de code qui est trop intelligent et tente de résoudre des problèmes trop à la fois. Par exemple, j'écris généralement code verbeux et ne se combinent pas les opérateurs multiples en une seule déclaration .

• Utilisez un débogueur. Mozilla et Firefox ont débogueurs assez bonne, et vous devriez les utiliser. Avec Microsoft Visual Studio 2005, il est possible de déboguer très compliqué code JavaScript.

Putting XMLHttpRequest dans une usine

Vous souhaitez mettre XMLHttpRequest dans une usine. Théorie Lorsque vous utilisez XMLHttpRequest, le problème est de savoir comment instancier XMLHttpRequest. Chaque navigateur a une manière différente de l'instanciation de XMLHttpRequest. Voici ce que Mozilla et la plupart des autres navigateurs utilisent (ce code est également fonctionner dans Internet Explorer à partir de la version 7): var xmlhttp = new XMLHttpRequest (); vous utilisez le code source suivant pour les versions Internet Explorer avant 7: var xmlhttp = new ActiveXObject ( 'Microsoft.XMLHTTP'); Le tampon Microsoft.XMLHTTP est un identifiant général, comme il ya des spécialisations disponibles en fonction du navigateur. Solution La réponse définitive au problème, c'est que pour instancier XMLHttpRequest vous avez besoin d'utiliser différentes techniques sur différents navigateurs. Pour être en mesure d'instancier l'objet XMLHttpRequest, vous devez créer une abstraction. L'abstraction pourrait être une classe ou une fonction, mais que vous ne choisissez pas d'importance. Ce qui importe est que vous créez une abstraction ou mettre en œuvre l'usine pattern.1 Dans la mise en œuvre pattern Factory, le principal défi consiste à identifier le navigateur exécute le script et ensuite utiliser l'instanciation appropriées XMLHttpRequest. Jsolait Les bibliothèques, Prototype, Yahoo! modèles, et le Toolkit Dojo tout mettre en œuvre une abstraction XMLHttpRequest qui est codée de la même manière. Pour illustrer l'essentiel de la façon dont il est codé examiner le code source suivant, ce qui est du serveur Yahoo! Design Pattern Library (http://developer.yahoo.com/ypatterns).

createXhrObject: function (transactionId) (var obj, http; try (/ / Instanciation XMLHttpRequest dans les navigateurs non-IE et assigne à http. http = new XMLHttpRequest ();/ / Object littérale par http et les propriétés id = (obj conn: http, TID: transactionId);) catch (e) (for (var i = 0; i http = new ActiveXObject (this._msxml_progid [i]);/ / Object littérale par http et les propriétés id = (obj conn: http, TID: transactionId);) catch (e) ())) finally (return obj;)),

Les instanciations sont enveloppés dans une série de blocs try et catch. A essayer et bloc catch en JavaScript est un bloc d'exception. L'idée derrière cette forme d'abstraction, c'est que vous essayez d'exécution du code source, et si elle échoue, vous faire autre chose. Les étapes suivantes sont effectuées dans le code source:

1. Entrez le bloc première exception.

2. Exécutez l'instanciation XMLHttpRequest en utilisant le nouveau mot clé.

3. Si les œuvres d'instanciation, puis le bloc finally est atteint.

4. Si l'instanciation échoue, une exception est générée et le bloc de capture démarre une boucle.

5. La boucle de tentatives d'instanciation du XMLHttpRequest Internet Explorer en utilisant des identifiants différents référencés par le membre de données this._msxml_progid.

6. Si l'objet XMLHttpRequest ne peut pas être instancié, un bloc catch vide capture l'exception.

7. Indépendamment de ce qui se passe, le bloc finally est exécuté et retourne l'instance d'objets stockés dans la variable obj. L'idée principale de l'abstraction est d'exécuter le code, et si le navigateur ne supporte pas la fonctionnalité, une exception est générée. L'exception est interceptée et provoque une séquence d'instanciation différente pour démarrer. Ce qui me gêne dans ce code est qu'il ne tente pas de comprendre ce qui est soutenu, mais utilise des exceptions JavaScript. Alors que l'application actuelle, une exception est générée pour amajority des cas. Cela est dû au moment d'écrire ces lignes, Internet Explorer a une part de marché supérieure à 80%. Cela signifie que la tentative d'instancier XMLHttpRequest en utilisant le nouveau mot clé ne fonctionnera pas et va générer une exception. L'autre façon de l'instanciation de XMLHttpRequest est utilisé par la bibliothèque Jaxson, tel que décrit dans les articles Ajax in Action (Manning, 2005) et Professional Ajax (Wrox, 2006). La technique montrée dans Ajax in Action est perfect2 et est implémenté par Jaxson comme suit.

 Source: / 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 ( "Impossible d'instancier XMLHttpRequest");

Note Pour instancier l'objet XMLHttpRequest sur Internet Explorer, une seule ligne de code source est utilisée. En revanche, les autres bibliothèques de l'utilisation de multiples tentatives d'instanciation. Ces tentatives d'instanciation multiples ne sont pas nécessaires parce que, selon la documentation MSDN, il est seulement nécessaire d'utiliser la chaîne Microsoft.XMLHTTP dans Internet Explorer version 6 et en dessous. Lors de l'instanciation de l'objet XMLHttpRequest, gardez les points suivants à l'esprit:

• Vous aurez besoin d'utiliser une abstraction, parce que les gens continueront à utiliser les anciennes versions d'Internet Explorer pour un certain temps à venir. Ainsi, vous aurez encore un besoin de comprendre la technique que l'instanciation à utiliser.

• Vous ne devez pas utiliser les exceptions pour tester la fonctionnalité attendue. Ce faisant, sans penser à se provoquer des exceptions soient cachées.

• La meilleure approche est de tester la fonctionnalité, puis instanciation de l'instance XMLHttpRequest.

• Cela dit, si vous utilisez une instanciation prédéfinis qui utilise des exceptions, comme le Yahoo! Design Pattern Library, elle n'est pas la fin du monde. Le point de cette recette est de suggérer une meilleure approche à utiliser autant que possible.

un article présenté par Sonja Lande


Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite.
Important: Cet article «Mettre XMLHttpRequest dans une usine" a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.


Online: 280 users browsing the articles directory