我需要將HTML頁面中的數據發送到在該頁面中加載的腳本文件。我能想到的最簡單的方法是使用在頁面中定義並在腳本文件中訪問的全局變量。在不使用全局變量的情況下將數據發送到JS文件
我們都知道全局狀態不好,所以我開始考慮可用於將數據從HTML頁面傳遞到腳本文件而不使用全局狀態的選項。我無法找到(或想到)任何。
我很好奇這是否可能。有任何想法嗎?
我需要將HTML頁面中的數據發送到在該頁面中加載的腳本文件。我能想到的最簡單的方法是使用在頁面中定義並在腳本文件中訪問的全局變量。在不使用全局變量的情況下將數據發送到JS文件
我們都知道全局狀態不好,所以我開始考慮可用於將數據從HTML頁面傳遞到腳本文件而不使用全局狀態的選項。我無法找到(或想到)任何。
我很好奇這是否可能。有任何想法嗎?
沒有。所有javascript範圍從全局級別開始,因此您必須必須至少有一個全局引用您的數據。
比方說,你想存儲的產品和事件的列表:
var myGlobalData = { "products":<products>, "events":<events> };
凡<products>
和<events>
是兩個不同的數據塊。
如果你在全局對象偏執狂,你可以簡單地刪除參考點(因此它的內容),你使用完畢後,如下所示:
delete window.myGlobalData;
一個選項是範圍的數據。例如,在JS文件,你可以這樣定義一個對象:
var processor = {
function setData(o) { // do stuff
}
};
然後在你的HTML你知道數據的作用範圍是處理器。所以你可以這樣做:
processor.setData({someData});
「處理器」現在是全球性的。你在暗示什麼是使用命名空間? jQuery將YAHOO中的所有內容放在YUI2中。我是否正確理解你的方法? – 2011-03-29 20:23:58
這真的取決於你在做什麼。一般來說,我不會建議這種方法,但根據您的情況需要考慮。爲了這個例子,我假設你正在使用jQuery(如果沒有,用你想用於onDOMReadyStateChange監視的任何東西替換document.ready)。
在HTML:
<script type='text/json-data' id='some_data_set'>
{ 'foo': 'bar', 'baz': 1 }
</script>
在JavaScript的:
$(function() {
var myData = JSON.parse($('script#some_data_set').html());
// YOUR CODE GOES HERE
});
這絕對是一種選擇。我沒有看到這樣做有任何問題。你爲什麼說你不會建議這種方法? – 2011-03-29 20:43:42
因爲它會在程序和數據之間引入額外的複雜程度。這也意味着您無法在加載整個頁面之前安全地使用數據。我只是在全部大寫中使用全局變量方法,表示它是該頁面上下文中的常量。但是,我知道這種方法沒有任何根本的缺陷。 – 2011-03-29 21:04:06
典型地,在一個HTML頁面加載的腳本用於在其中裝載了它的頁面來訪問數據。所以你的HTML文件中的任何東西都是由你的腳本讀取的遊戲。你試圖閱讀什麼數據? – 2011-03-29 20:14:04