Firefox 不对动态脚本注入执行“异步”加载?
Posted
技术标签:
【中文标题】Firefox 不对动态脚本注入执行“异步”加载?【英文标题】:Firefox doesn't do "asynchronous" load on dynamic script injection? 【发布时间】:2011-05-31 10:56:29 【问题描述】:我有 2 个 js 函数,request() 和 response()。 请求向 DOM 注入动态脚本标签,从服务器加载一些“脚本”。 来自服务器的脚本设置为调用 response()。
现在,如果我立即一个接一个地进行 5 次调用,并且如果第一个仍在等待,那么接下来的 4 次调用仍在进行,响应返回(我从 Firebug 看到),但没有调用 response()直到第一个返回。 这仅在 Firefox 中发生。 :(
为什么这不进行函数调用?
PS:
-
如果第一个请求被延迟,我
不在乎结果,我要
最后一个要加载的和
毫不拖延地调用响应..
我尝试了将 dataType 设置为 'jsonp' 的 $.ajax、脚本标签的纯 javascript 样式插入和 $.getScript。 FF 似乎没有什么能很好地工作:(
编辑:对于那些要求代码示例的人:
function request()
var URL = 'http://xxx.xxx.xxx.xxx/cgi-bin/response.php?callback=?';
callHandle = $.getScript(URL);
function response(data)
alert(data);
请求函数调用服务器的php脚本,代码如下:
$data = $_GET['callback']; //using just to identify request uniquely.
sleep(rand(1,10));
echo "response(".$data.")";
现在,如果第一个请求需要 10 秒,第二个请求需要 2 秒,则应为第二个请求回调响应。但它正在获得响应,而不是警报,它正在等待第一个请求在 Firefox 中完成。为什么会这样?
【问题讨论】:
如何通过request()
将脚本标签注入DOM?
请贴一些代码。没有它就很难猜出哪里出了问题。
用代码编辑了原始问题。
【参考方案1】:
我见过同样的事情:Firefox 按照脚本元素附加到文档的顺序处理返回响应(使用 document.createElement('script') 完成的 JavaScript 包含并将它们附加到 Head-Node) .从程序员的角度来看,这简化了编程。但是,我认为您应该将此视为此浏览器(版本)的实现细节,而不是保证。 Google chrome 以任何(意外)顺序执行包含的脚本。
在查看 Firefox 4 和 html5 合规性 (http://hsivonen.iki.fi/script-execution/) 时,此行为已被称为“旧的 firefox 行为”
旧的 firefox 行为
脚本插入的外部非异步, 中执行的非延迟脚本 为了将它们插入 文件。
您是否尝试过使用 document.write 插入脚本?
【讨论】:
【参考方案2】:除非出于教育原因,否则我建议使用专门处理这些浏览器特性的库。例如:http://code.google.com/p/controljs/
【讨论】:
以上是关于Firefox 不对动态脚本注入执行“异步”加载?的主要内容,如果未能解决你的问题,请参考以下文章