在Firefox中多次使用jQuery加载远程脚本时出现问题

时间:2009-11-30 15:38:59

标签: javascript jquery

我的网页上有一个脚本元素,如下所示:

<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...')) - 但我想知道这里发生了什么。

提前致谢!

2 个答案:

答案 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参数,每次都会改变