Mettere XMLHttpRequest in una fabbrica

Durata gestione Behavioral Codice

  

Problema che si desidera gestire in modo efficace ed eseguire il debug del runtime del codice di comportamento. Teoria usando la parola chiave eval o dinamicamente l'attribuzione delle funzioni alle proprietà dell'oggetto è una parte importante della programmazione dinamica. Programmazione dinamica coinvolge il codice che mostra un comportamento in fase di runtime, o Codice di comportamento. Codice comportamentale non è una cattiva idea, ma lo fa per rendere più complicato il debug. Il problema principale con il codice di comportamento è che il debugger non ha alcuna idea di ciò che è fonte di debug. Solution Ci sono soluzioni diverse si può considerare qui sono in breve:

• Attuare test-driven development ed eseguire approfonditi esami in modo incrementale. Fare altrimenti può causare errori di essere generato in pezzi di codice che non hanno problemi. Nel corso di questo articolo, le ricette utilizzare test-driven tecniche di sviluppo che è possibile esaminare per capire come funziona il codice. Io consiglio vivamente di prendere un momento all'altro per esplorare come il codice è stato scritto, se non l'hai già fatto. Date un'occhiata a questi file, per esempio: / website / ROOT / ajaxrecipes / javascript / conventions.html, / website / ROOT / ajaxrecipes / javascript / proxy.html, e / website / ROOT / ajaxrecipes / javascript / variablebehavior.html.

• Generare il codice in un buffer che è oggetto di dumping alla casella di testo di una pagina HTML. Prendete il codice di dumping e di incollarlo in una pagina HTML per l'esecuzione. Il codice di dumping conterrà l'errore che può essere il debug. Questa soluzione è solo auspicabile, tuttavia, se si hanno problemi persistenti e non riesce a trovare la fonte.

• principi di semplice utilizzo. Mi piace dinamica e il codice generato per quanto chiunque altro, ma stare lontano da codice che è troppo intelligente e cerca di risolvere i troppi problemi in una volta. Ad esempio, io di solito scrivere il codice prolisso e non combinare più operatori in una singola istruzione .

• Usare un debugger. Mozilla e Firefox hanno debugger decente, e si dovrebbe usarli. Con Microsoft Visual Studio 2005, è possibile eseguire il debug di codice JavaScript molto complicato.

Mettere XMLHttpRequest in una fabbrica

Volete mettere XMLHttpRequest in una fabbrica. Theory Quando si utilizza XMLHttpRequest, il problema è come creare un'istanza di XMLHttpRequest. Ogni browser ha un modo diverso di un'istanza XMLHttpRequest. Ecco ciò che la maggior parte di Mozilla e altri browser uso (questo codice funziona anche in Internet Explorer a partire dalla versione 7): var xmlhttp = new XMLHttpRequest (); È possibile utilizzare il seguente codice sorgente per le versioni di Internet Explorer prima di 7: var xmlhttp = new ActiveXObject ( 'Microsoft.XMLHTTP'); Il buffer Microsoft.XMLHTTP è un identificatore generale, in quanto vi sono specializzazioni disponibili a seconda del browser. Soluzione La risposta a breve il problema è che per creare un'istanza di XMLHttpRequest è necessario utilizzare tecniche diverse su diversi browser. Per essere in grado di istanziare l'oggetto XMLHttpRequest, è necessario creare un'astrazione. L'astrazione potrebbe essere una classe o una funzione, ma che si sceglie non importa. Ciò che conta è che si crea un'astrazione o attuare la Factory pattern.1 Per l'attuazione del modello di fabbrica, la sfida principale è quello di individuare quale browser è in esecuzione lo script e quindi utilizzare l'istanziazione XMLHttpRequest appropriato. Jsolait Le biblioteche, Prototype, Yahoo! modelli, e Dojo Toolkit tutte attuare un'astrazione XMLHttpRequest, che è codificato nella stessa maniera. Per illustrare l'essenza di come viene codificato in considerazione il seguente codice sorgente, che è da Yahoo! Design Pattern Library (http://developer.yahoo.com/ypatterns).

createXhrObject: function (TransactionID) (var obj, http; try (/ / un'istanza di XMLHttpRequest in non-browser IE e assegna a http. http = new XMLHttpRequest ();/ / Object literal con http e le proprietà id obj = (conn: http, tid: TransactionID);) catch (e) (for (var i = 0; i http = new ActiveXObject (this._msxml_progid [i]);/ / Object literal con http e le proprietà id obj = (conn: http, tid: TransactionID);) catch (e) ())) finally (return obj;))

Il concretizzazioni vengono avvolti in una serie di provare a raggiungere i blocchi. A cercare di blocco catch in JavaScript è un blocco di eccezioni. L'idea alla base di questa forma di astrazione è che si tenta di esecuzione del codice sorgente, e se non fai qualcosa d'altro. Le seguenti operazioni sono effettuate nel codice sorgente:

1. Inserisci il primo blocco eccezione.

2. Eseguire l'istanza XMLHttpRequest usando la parola chiave new.

3. Se le opere istanza, allora il blocco finally viene raggiunto.

4. Se l'istanza non riesce, viene generata un'eccezione e il blocco catch inizia un ciclo.

5. Il ciclo di tentativi di creare un'istanza di Internet Explorer XMLHttpRequest usando diversi identificativi a cui fa riferimento il membro this._msxml_progid dati.

6. Se l'oggetto XMLHttpRequest non può essere istanziata, un blocco vuoto catch cattura l'eccezione.

7. Indipendentemente da ciò che accade, il blocco finally viene eseguita e restituisce l'istanza dell'oggetto memorizzato nella variabile obj. L'idea principale di astrazione è quello di eseguire il codice, e se il browser non supporta la funzionalità, viene generata un'eccezione. L'eccezione viene catturata e provoca una sequenza diversa istanza per l'avvio. Ciò che mi preoccupa di questo codice è che non cerca di capire cosa è supportato, ma utilizza le eccezioni JavaScript. Poiché l'attuazione attuale, viene generata un'eccezione per amajority dei casi. Questo è perché al momento della stesura di questo, Internet Explorer ha una quota di mercato superiore al 80%. Ciò significa che il tentativo di creare un'istanza di XMLHttpRequest utilizzando la nuova parola chiave non funzionerà e genererà un'eccezione. Il modo alternativo di un'istanza di XMLHttpRequest è utilizzato dalla libreria jaxson, come indicato negli articoli Ajax in Action (Manning, 2005) e Ajax Professional (Wrox, 2006). La tecnica mostrata in Ajax in Action è perfect2 e viene implementata dai jaxson come 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 ( "Impossibile istanziare XMLHttpRequest");

Nota Per istanziare l'oggetto XMLHttpRequest su Internet Explorer, una sola riga di codice sorgente è utilizzato. Al contrario, le biblioteche di altri tentativi di utilizzo di istanze multiple. Questi tentativi multipli di istanze non sono necessarie, perché, per la documentazione MSDN, è necessario solo per utilizzare la stringa Microsoft.XMLHTTP in Internet Explorer versione 6 e qui di seguito. Quando un'istanza dell'oggetto XMLHttpRequest, mantenere i seguenti punti in mente:

• È necessario utilizzare un'astrazione, perché la gente continuerà ad usare le vecchie versioni di Internet Explorer per qualche tempo a venire. Così, avrai ancora la necessità di capire quale tecnica di istanziazione da utilizzare.

• Si consiglia di non utilizzare le eccezioni per verificare la funzionalità del previsto. Così facendo, senza pensare causerà eccezioni possono essere nascosti.

• L'approccio migliore è quello di test per la funzionalità e quindi una nuova istanza XMLHttpRequest.

• Tutto ciò che ha detto, se si utilizza una istanza predefinita che utilizza le eccezioni, come il Yahoo! Design Pattern Library, non è la fine del mondo. Il punto di questa ricetta è quello di suggerire un approccio migliore da usare quando possibile.

un articolo presentato da Sonja Lande


Disclaimer:Il nostro sito non è responsabile per il contenuto di questo articolo. Webarticles è una risorsa gratuita di informazioni.
Importante: Questo articolo "Mettere XMLHttpRequest in una fabbrica" è stato tradotto da un software automatico. Ci dispiace per eventuali errori di ortografia che possono essersi verificati. Grazie per la vostra comprensione.


Online: 336 users browsing the articles directory