我的网页上有一个脚本元素,如下所示:
<script id="myscript"></script>
现在,从javascript文件中,我正在执行以下操作:
$('#myscript').src('http://foo.bar?callback=somefunc')
现在这个远程脚本'返回以下形式的javascript':
somefunc(somearg);
当我运行所有这些时,事情工作正常,脚本动态加载,并执行'somefunc'回调。
当我再次做同样的事情时,问题就发生了。假设我再次称呼同样的事情:
$('#myscript').src('http://foo.bar?callback=somefunc')
由于某种原因,DOESNT仅在Firefox中返回javascript调用。 (在IE中正常工作 - somefunc会按预期再次执行)。
我可以想到丑陋的变通方法(例如每次都做$('head').append('<script...'))
- 但我想知道这里发生了什么。
提前致谢!
答案 0 :(得分:3)
我建议您使用$.getScript
而不是多次使用单个脚本标记加载脚本:
$.getScript("http://foo.bar?callback=somefunc");
该函数将抽象script
元素创建及其对DOM的引入。
但似乎您正在访问JSONP服务,在这种情况下,您只需要$.getJSON
:
$.getJSON("http://foo.bar?callback=?", function(json){
// callback
});
答案 1 :(得分:2)
我可以想到丑陋的变通方法(例如做一个$('head')。append('
丑陋是主观的;就个人而言,我发现您尝试使用的技术(使单个脚本标记加载多个脚本)更加丑陋。
但这并不重要。添加新的脚本标记可以 - 所以如果你在做什么时遇到问题,只需使用常规方法并使用它。
FWIW:Firefox可能没有响应,因为你实际上并没有改变任何东西 ...如果你想让它更加丑陋,请附加一些do-nothing querystring参数,每次都会改变