2010-07-16 16 views
5

Disclaimer: Sono abbastanza nuovo per AJAX!Metodo di buona pratica per caricare JavaScript tramite ajax

Mi sono guardato intorno e non sono sicuro di quale metodo utilizzare per caricare javascript usando ajax.

Sto usando ajax per richiedere pagine che richiedono ciascuno i propri 6-10 metodi brevi. In totale ci saranno forse 5-6 di queste pagine, quindi un totale approssimativo di 35+ metodi.

Preferirei accedere al javascript necessario poiché ogni pagina che richiede carica.

Ho visto alcuni metodi, e non sono sicuro che si potrebbe meglio soddisfare le mie esigenze:

  1. includere un elemento script di vuoto nella testa, e manipolare l'attributo src via. il DOM.

  2. Creare un nuovo elemento di script tramite. il DOM e aggiungilo al document.body (sembra uguale a # 1).

  3. jQuery (che sto già utilizzando) ha un metodo ajax getScript().
  4. Non ho letto nulla a riguardo, ma posso semplicemente includere un elemento di script come parte della risposta ajax?

Dato che sono nuovo per lo sviluppo di ajax e Web in generale, sono curioso di conoscere gli alti e bassi di ciascun metodo e tutti i metodi che ho perso.

Alcuni problemi sono: -Sarà utilizzata una copia cache o lo script verrà scaricato ogni volta che viene effettuata una richiesta Ajax. Si noti che gli script saranno statici. -Browser compatibilità. Io uso Chrome, ma questa app verrà utilizzata tra le versioni di IE> = 7 e Firefox.

+2

Perché non basta avere un file esterno? Se si tratta di metodi molto brevi, un singolo file verrà gzip e memorizzato nella cache e sarà trascurabile per il client e semplificherà la manutenzione fino a un tag '

0

Vai con getScript. Essenzialmente fa la stessa cosa del secondo metodo, ma non devi preoccuparti di come ascoltare il caricamento in vari browser (principalmente IE).

La risposta AJAX è semplicemente testo per quanto riguarda il DOM. Non ha alcun effetto a meno che non lo si inserisca nel DOM in qualche modo.

+0

Vorrei raccomandare * contro * questo, '$ .getScript()' intenzionalmente non memorizza nella cache, puoi vedere qui: http://github.com/jquery/jquery/blob/master/src/ajax.js#L265 –

+0

Sono d'accordo con Nick, andare in $ .ajax con uno script dataType. –

+0

@Nick @ Julian - buoni punti, non ero a conoscenza di jQuery che si intrufolava nei timestamp nell'URL :). Dico solo 'ajaxSetup' per avere il caching permanente per tutto, o anche meglio [sovrascrivere] (http://jamiethompson.co.uk/web/2008/07/21/jquerygetscript-does-not-cache/) il' getScript nativo 'metodo per consentire facoltativamente la memorizzazione nella cache ed essere comunque compatibile con le versioni precedenti. Se jQuery l'avesse mancato, non lo faremo. Non è questo ciò che è JavaScript? : P – Anurag

1

Come tutte le altre risposte qui solo dire "utilizzare jQuery" senza ulteriori informazioni/spiegazioni/giustificazioni, è probabilmente la pena effettivamente guardando le altre opzioni che hai menzionato.

  • Opzione # 1

    potrebbe essere un po 'complicato in quanto richiede di attendere fino a quando uno script ha scaricare ed eseguire prima di andare a prendere quello successivo (come hai un solo elemento script).

  • Opzione # 2

    è meglio come è possibile aggiungere un secondo elemento di script per DOM prima che il primo ha terminato il download, senza influenzare il download/esecuzione.

  • Opzione # 3

    consigliato da tutti prima di me, va bene se ti trovi in ​​un ambiente di jQuery e già caricando il (molto pesante) libreria jQuery per altri usi - caricandola solo per questo è ovviamente superfluo . Vale anche la pena notare che $.getScript() e $.ajax() utilizzano entrambi eval() per eseguire lo script. eval() non è "malvagio" in questo contesto in quanto è una fonte attendibile, ma a volte può risultare leggermente più difficile eseguire il debug del codice eval().

  • L'opzione n. 4

    non è possibile afaik.

  • Opzione # 5

    raccomandato da Nick Craver nel primo commento PO è quello che mi piacerebbe andare con TBH - se gli script sono statici come dici tu, la cache sarà più efficiente di molteplici richieste HTTP. Si potrebbe anche considerare di usare un cache.manifest per il caching aggressivo, se siete particolarmente preoccupati per la larghezza di banda: http://www.html5rocks.com/tutorials/appcache/beginner/

Problemi correlati