2014-04-06 13 views
5

Uso il metodo ajax di jquery per caricare dinamicamente alcuni snippet html dal server e inserire lo snippet in un div. All'interno dello snippet ci sono alcuni tag <script> per script esterni.Perché jquery invia la richiesta GET per un tag script caricato in modo dinamico?

Ho guardato l'attività di rete nella barra degli strumenti di Chrome mentre effettuavo la richiesta di ajax e ho trovato che le richieste GET per i tag di script sono state aggiunte con qualcosa come ?_=1234567890. Ho anche notato l'iniziatore della richiesta GET è jquery. So che jquery lo fa per le richieste AJAX per evitare di usare la versione cache, ma voglio che lo script sia memorizzato nella cache.

Ciò che mi ha davvero sorpreso è che i tag <script> vengono recuperati da jquery con ajax. Quando inserisci un tag <script> in DOM, il browser dovrebbe essere responsabile del caricamento e dell'esecuzione di esso? Perché jQuery intraprende l'azione qui?

Se ignoro jquery e utilizzo js normale per aggiungere un tag <script> a DOM, il browser lo caricherà e lo analizzerà, giusto? Perché il browser non fa questo e lascia che jquery prenda il controllo?

============== codice =============

codice per caricare il frammento di codice HTML:

var url = "/"+modulename+"/settings/"+this.selectedProduct.id; 
$.get(url, null, function(snippet){ 
    $("div#content").empty().html(snippet); 
} 

Il frammento di codice HTML:

<script type='text/javascript' src="http://www.staticcdn.org/somelib.js"></script> 

<script> 
    <!--some html rendering code that depends on somelib--> 
</script> 
+0

E 'più una questione di, perché jQuery prendere il sopravvento e non lasciare che il browser fare questo? – Scimonster

+0

Lo fa se si imposta l'opzione cache in $ .ajax su false? – adeneo

+0

se il tuo '

1

Date un'occhiata nel doc jquery per l'Ajax: http://api.jquery.com/jQuery.ajax/ e notare l'opzione datatype

"script": Valuta la risposta come JavaScript e lo restituisce come testo normale. Disattiva la memorizzazione nella cache aggiungendo un parametro stringa di query "_ = [TIMESTAMP]" all'URL, a meno che l'opzione cache non sia impostata su true.Nota: questo trasformerà i POST in GET per le richieste di dominio remoto.

$.get utilizzare $.ajax. Se non vuoi il ?_=... devi chiamare il $.ajax da solo.

È anche il mio dare un'occhiata a scelta cache

+1

Quello che ottengo con ajax è html (datatype), non puro script. Ma jquery si prende la libertà di caricare il tag script all'interno e valutarlo. Nel suo documento, dice "html": restituisce HTML come testo normale; i tag script inclusi vengono valutati quando inseriti nel DOM. - Ma non ho trovato alcuna opzione per disattivarlo. – NeoWang

+0

Questa è una funzionalità del tuo browser. Se inserisci un tag '