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

现在,如果我立即拨打5个接一个电话,如果第一个人仍在等待,那么接下来的4个电话仍会返回(我从firebug那里看到了),但是直到第一次,响应()才呼叫()一个返回。
这仅在Firefox中发生。 :(

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

PS:

  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包含),并将其附加到标题节点上),以将脚本元素附加到文档中。从程序员角度来看,这简化了编程。但是,我认为您应该将其视为此浏览器(版本)的实现细节,而不是保证。 Google Chrome以任何(意外)顺序执行随附的脚本。

当寻找Firefox 4和HTML5合规性时,此行为已被称为“旧的Firefox行为”( http://hsivonen.iki.fi/script-execution/ )

旧的Firefox行为

脚本插入的外部非迅速,非转让脚本按照它们插入文档的顺序执行。

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

其他提示

除非这是出于教育原因,否则我建议使用一个特定处理这些浏览器特质的库。例如: http://code.google.com/p/controljs/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top