开发者

How would I pass data to an external script loaded with $.getScript()?

So I'm trying to load a javascript remotely using jquery's $.getScript, but I'm puzzled on 开发者_Go百科how I can pass data to the external script.

I've tried setting variables before the call but they aren't available in the script that gets loaded, and when I try to send/retrieve them using the query string, the remote script tries to read the querystring of the base file that it gets called from, not itself. Is there any other way to do this? Or is it possible to have a javascript file read its own querystring rather than the file it's called from (that's loaded in the browser)?

// 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(){});

In the execute.js file, the editor_ini and foo are both unavailable, I get the same result with:

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

because the remote script seems to be getting the query string from the original document rather than the one used when calling the file.

If it matters, I was trying to use the query object plugin for jquery for reading the query string.


global variable declared in inline javascript is accessible in external javascript page loaded using $.getScript().


I bet that your var foo='bar' is inside a function, so not visible in global scope. Try:

window.foo = 'bar'


Truly global variables will be accessible to your script. So, if they aren't, then it's probably because your variables that you think are global actually aren't. You can either move them to the top level scope or set them on the window object like Alexei suggested.

There are other ways to share data.

1) You can put an id on the <script> tag that loads the code and then have the code get the .src value from that tag and get the query string off the script's actual URL. I like this option, but I don't know if you can do it using jQuery.getScript() since I don't think it exposes that as an option.

2) You can have the loading script call a function that you provide and return an object with the desired data from that function.

3) Once the new script is loaded, you can call a setXXX() function in that script to set the state that it needs.

4) You can set information into a cookie that the other script can read.

5) You can encode data into a URL hash value that the other script can read.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜