2014-04-06 34 views
5

我使用jquery的ajax方法從服務器動態加載一些html代碼片段,並將代碼片段插入到div中。片段內有一些用於外部腳本的<script>標籤。爲什麼jQuery發送動態加載的腳本標記的GET請求?

我在發出ajax請求的同時觀看了Chrome工具欄中的網絡活動,發現腳本標記的GET請求附加了類似?_=1234567890之類的內容。我也注意到 GET請求的發起者是jquery。我知道jquery這樣做是爲了避免使用緩存版本的AJAX請求,但我希望緩存腳本。

真正讓我感到驚訝的是,<script>標籤由jquery和ajax獲取。當您將一個<script>標籤插入到DOM中時,瀏覽器是否應負責加載並執行它?爲什麼jQuery在這裏採取行動?

如果我跳過jquery並使用純js將<script>標記附加到DOM,瀏覽器將加載並解析它,對嗎?爲什麼瀏覽器不這樣做並讓jquery接管?

==============代碼=============

代碼加載HTML片段:

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

html代碼片段:

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

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

這是更大的問題,爲什麼jQuery的接管,而不是讓瀏覽器做到這一點? – Scimonster

+0

如果您將$ .ajax中的緩存選項設置爲false,會怎樣? – adeneo

+0

如果您的'

1

已在jQuery的文檔看看阿賈克斯:http://api.jquery.com/jQuery.ajax/並注意選項datatype

「腳本」:評估響應爲JavaScript,並返回純文本。除非緩存選項設置爲true,否則通過向URL追加查詢字符串參數「_ = [TIMESTAMP]」來禁用緩存。注意:這會將POST轉換爲遠程域請求的GET。

$.get使用$.ajax。如果你不想要?_=...,你必須自己撥打$.ajax

還我看看選項cache

+1

我用ajax得到的是html(數據類型),而不是純腳本。但jquery冒昧地在腳本標籤中加載並評估它。在它的文檔中,它說 - 「html」:將HTML作爲純文本返回;包含的腳本標記在插入到DOM中時被評估。 - 但我沒有找到任何選項來關閉它。 – NeoWang

+0

這是您瀏覽器的一項功能。如果您插入'

  • 11. 爲什麼我無法向Google.com發送GET請求?
  • 12. 爲什麼「在新選項卡中打開」發送GET請求?
  • 13. jquery:爲什麼$ .get發送OPTION包?
  • 14. jquery腳本不運行ajax GET請求
  • 15. jQuery:爲什麼2 ajax GET請求而不是1請求?
  • 16. 爲什麼document.write不適用於動態加載的腳本?
  • 17. Javascript發送GET請求
  • 18. jQuery.post()發送GET請求?
  • 19. jQuery的負載頁發送POST請求
  • 20. 爲什麼不動態添加腳本加載
  • 21. AS3 POST請求作爲GET發送
  • 22. CORS請求 - 爲什麼cookie未發送?
  • 23. 當jQuery.ajax發送GET時發送OPTIONS請求跨域的Ext.Ajax.request GET
  • 24. 使用javascript發送POST或GET請求到php腳本
  • 25. RestEasy的:發送JSON的GET請求
  • 26. JQuery動態腳本標記和執行
  • 27. 的動態加載腳本
  • 28. 如果JSONP只是動態腳本,請求是什麼時候發出的?
  • 29. 爲什麼我的移動網站不能發送AJAX請求?
  • 30. 發送POST請求的動態數據