2016-07-21 12 views
1

Ich benutze MaterializeCSS, AngularJS und jQuery, um eine einfache Webapp zu erstellen. Da ich Materialise verwende, und aufgrund der Gründe, warum ich es entworfen habe, muss ich die Sidebar-Schaltfläche in jeder AngularJS-Ansicht mit jQuery initialisieren.jQuery Senden von Abfragezeichenfolgen für jedes Skript embebbed

Wenn ich diese Kopie auf jeder Ansicht, es funktioniert gut:

<script> 
    $(".button-collapse").sideNav({ 
     menuWidth: 150 
    }); 
</script> 

jedoch, wenn ich eine neue Datei mit dem Namen js sidenav.js:

<script src='/js/sidenav.js'></script> 

aus irgendeinem Grund, jQuery (oder vielleicht Angular, aber das XHR wird von jQuery initiiert) sendet ein XHR mit einer Abfragezeichenfolge, um dieses Skript zu laden, wodurch der Cache ungültig wird und aufgrund von Latenz eine "Verzögerung" verursacht wird. Während nach einiger Nutzung alle Ansichten zwischengespeichert werden, hält das Skript aufgrund der Abfrage-String neu geladen werden:

[Thu Jul 21 16:39:31 2016] 192.168.0.103:38124 [200]: /js/sidenav.js?_=1469129949496 
[Thu Jul 21 16:39:37 2016] 192.168.0.103:38123 [200]: /js/sidenav.js?_=1469129949497 
[Thu Jul 21 16:39:42 2016] 192.168.0.103:38126 [200]: /js/sidenav.js?_=1469129949498 
[Thu Jul 21 16:39:42 2016] 192.168.0.103:38125 [200]: /js/sidenav.js?_=1469129949499 
[Thu Jul 21 16:39:47 2016] 192.168.0.103:38128 [200]: /js/sidenav.js?_=1469129949500 
[Thu Jul 21 16:39:51 2016] 192.168.0.103:38129 [200]: /js/sidenav.js?_=1469129949501 

Wie kann ich jQuery oder Angular davon ab, eine Abfrage-String auf sie oder ein anderes Verfahren zu stoppen, es zu cachen?

Danke.

Antwort

3

jQuerys $.ajax() Funktion hat einen cache Parameter in seinem settings Objekt. Standardmäßig ist cache für die meisten Datentypen true, mit Ausnahme von jsonp und script, in der Standardeinstellung false. Dies verursacht den zufälligen Abfrageparameter _.

Wenn Sie Zugriff auf den spezifischen Aufruf $.ajax() haben, der dieses Skript herunterlädt, können Sie dies beheben, indem Sie cache: true dem Objekt settings für diesen Aufruf hinzufügen.

Andernfalls können Sie $.ajaxSetup() mit einem cache: true Wert verwenden. Dies sollte das gleiche tun, es sei denn, der spezifische $.ajax() Anruf hat cache: false darin, oder wenn ein anderer Anruf zu $.ajaxSetup() diesen Wert überschreibt. Wenn ein anderer Code auf dem Standardwert cache basiert, wirkt sich dies auch auf diesen Code aus.

Es ist auch möglich, dass das Skript mit einem $.getScript() Aufruf geladen wird, der kein settings Objekt benötigt und keine Möglichkeit hat, die cache Einstellung direkt zu überschreiben. Wenn dies der Fall ist, können Sie entweder $.getScript() in den entsprechenden $.ajax() Anruf ändern und die cache: true Einstellung dort hinzufügen, oder Sie können $.ajaxSetup() verwenden. Weitere Informationen finden Sie in der Dokumentation zu $.ajax(), $.getScript() und $.ajaxSetup().

0

Sowohl jQuery als auch Angual laden keine Skripts Sie Ihre Seite, der Browser ist derjenige, der damit umgehen.

Zum Beispiel in Google Chrome können Sie die Debug-Konsole mit der F12-Taste öffnen, dann auf die Registerkarte Netzwerk gehen und auf "Cache deaktivieren" klicken. Dies sollte verhindern, dass der Browser Ihre Ressourcen zwischenspeichert.

+0

Hier ist, was Chrom sagt, wenn es geladen wird: collapse.js _ = 1469128268787 xhr \t jquery.js: 8630 \t 365 B \t Es ist ein XHR, nicht der Browser, denke ich –