2011-09-16 50 views
4

所以我試圖用jquery的$ .getScript遠程加載一個javascript,但我對如何將數據傳遞給外部腳本感到困惑。

我試過在調用之前設置變量,但它們在被加載的腳本中不可用,當我嘗試使用查詢字符串發送/檢索它們時,遠程腳本嘗試讀取查詢字符串它被調用的基本文件,而不是它本身。有沒有其他方法可以做到這一點?或者是有可能有一個JavaScript文件讀取自己的查詢字符串,而不是從它調用的文件(它在瀏覽器中加載)?

​​

在execute.js文件時,editor_inifoo都是不可用的,我得到了相同的結果:

// load the editor 
$.getScript('assets/desktop/desklets/'+launcher.config.editor+'/execute.js', { page: current_page, action: 'edit', foo: 'bar' }, function(){}); 

因爲遠程腳本似乎正從原來的查詢字符串文件而不是調用文件時使用的文件。

如果很重要,我試圖使用​​jquery讀取查詢字符串。

+2

根據jQuery.getScript()的文檔,「腳本在全局上下文中執行,因此它可以引用其他變量並使用jQuery函數。」 @亞歷克斯可能是在做點什麼。 –

+0

嗯,解釋它,我認爲該腳本將被執行的範圍內,它被稱爲。 – wyqydsyq

回答

5

我敢打賭,你的var foo='bar'是在一個函數內,所以在全局範圍內不可見。嘗試:

window.foo = 'bar' 
+0

工作完美,謝謝! :) 我現在覺得自己像一個白癡,範圍總是與我在JavaScript中混淆。 – wyqydsyq

6

中內嵌的JavaScript聲明的全局變量是在外部訪問使用$.getScript().讓JavaScript頁面加載確保變量是全球

2

真正的全局變量將是你的腳本訪問。所以,如果他們不是,那麼這可能是因爲你認爲全球化的變量其實不然。您可以將它們移動到頂層作用域,也可以像Alexei建議的那樣將它們設置在窗口對象上。

還有其他共享數據的方式。

1)您可以在加載代碼的<script>標記上放置一個標識,然後讓代碼從該標記獲取值.src,並將查詢字符串從腳本的實際URL中移除。我喜歡這個選項,但是我不知道你是否可以使用jQuery.getScript()這樣做,因爲我不認爲它是作爲一個選項公開的。

2)您可以讓加載腳本調用您提供的函數,並從該函數返回具有所需數據的對象。

3)加載新腳本後,可以在該腳本中調用setXXX()函數來設置它所需的狀態。

4)您可以將信息設置爲其他腳本可以讀取的cookie。

5)您可以將數據編碼爲另一個腳本可以讀取的URL哈希值。

相關問題