gpt4 book ai didi

javascript - Firefox 不会在动态脚本注入(inject)时加载 "asynchronous"?

转载 作者:行者123 更新时间:2023-11-29 22:37:25 24 4
gpt4 key购买 nike

我有 2 个 js 函数,request() 和 response()。请求向 DOM 注入(inject)一个动态脚本标签,从服务器加载一些“脚本”。来自服务器的脚本被设置为调用 response()。

现在,如果我立即一个接一个地进行 5 次调用,如果第一个仍在等待,接下来的 4 次调用仍在进行,响应返回(我从 Firebug 看到的),但没有调用 response()直到第一个回来。
这只发生在 Firefox 中。 :(

为什么这不进行函数调用?

附言:

  1. 如果第一个请求被延迟,我不关心它的结果,我想要最后一个要加载的和立即调用响应..
  2. 我尝试将 $.ajax 的数据类型设置为“jsonp”、纯 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 中完成。为什么会这样?

最佳答案

我见过同样的事情:Firefox 按照脚本元素附加到文档的顺序处理返回响应(使用 document.createElement('script') 完成的 javascript 包含并将它们附加到头节点) .从程序员的 Angular 来看,这简化了编程。但是,我认为您应该将此视为此浏览器(版本)的实现细节,而不是保证。 Google chrome 以任何(意外的)顺序执行包含的脚本。

在查看 Firefox 4 和 HTML5 合规性时,此行为已称为“旧 firefox 行为”(http://hsivonen.iki.fi/script-execution/)

The Old firefox behavior

Script-inserted external non-async,non-defer scripts executed in theorder they were inserted into thedocument.

您是否尝试过使用 document.write 插入脚本?

关于javascript - Firefox 不会在动态脚本注入(inject)时加载 "asynchronous"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4544114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com