所以我试图使用jquery的$ .getScript远程加载javascript,但我对如何将数据传递到外部脚本感到困惑。
我已经尝试在调用之前设置变量,但它们在加载的脚本中不可用,当我尝试使用查询字符串发送/检索它们时,远程脚本尝试读取基础的查询字符串它被调用的文件,而不是它自己。有没有其他方法可以做到这一点?或者是否可以让javascript文件读取自己的查询字符串而不是从中调用的文件(在浏览器中加载)?
// editor ini
var editor_ini = { page: current_page, action: 'edit' };
var foo = 'bar';
// load the editor
$.getScript('assets/desktop/desklets/'+launcher.config.editor+'/execute.js', function(){});
在execute.js文件中,editor_ini
和foo
都不可用,我得到了相同的结果:
// load the editor
$.getScript('assets/desktop/desklets/'+launcher.config.editor+'/execute.js', { page: current_page, action: 'edit', foo: 'bar' }, function(){});
因为远程脚本似乎从原始文档获取查询字符串而不是调用文件时使用的查询字符串。
如果重要,我试图使用query object plugin获取jquery来读取查询字符串。
答案 0 :(得分:6)
全局变量可以在使用$.getScript().
加载的外部javascript页面中访问。确保变量是全局的
答案 1 :(得分:5)
我敢打赌你的var foo='bar'
在函数内部,所以在全局范围内不可见。尝试:
window.foo = 'bar'
答案 2 :(得分:2)
您的脚本可以访问真正的全局变量。所以,如果它们不是,那么可能是因为你认为全局的变量实际上并非如此。您可以将它们移动到顶级范围,也可以像Alexei建议的那样在窗口对象上设置它们。
还有其他方法可以共享数据。
1)您可以在加载代码的<script>
标记上放置一个id,然后让代码从该标记中获取.src
值,并从脚本的实际URL中获取查询字符串。我喜欢这个选项,但我不知道你是否可以使用jQuery.getScript()
来完成它,因为我不认为它会将它作为一个选项公开。
2)您可以让加载脚本调用您提供的函数,并从该函数返回包含所需数据的对象。
3)加载新脚本后,可以在该脚本中调用setXXX()函数来设置所需的状态。
4)您可以将信息设置为另一个脚本可以读取的cookie。
5)您可以将数据编码为另一个脚本可以读取的URL哈希值。