gpt4 book ai didi

jQuery getScript 加载与执行

转载 作者:行者123 更新时间:2023-12-03 22:05:50 24 4
gpt4 key购买 nike

getScript docs说说成功回调:

“一旦脚本加载但不一定执行回调就会被触发。”

但在我的测试中,这似乎并不正确。对于具有以下内容的主机页:

var startTime = new Date();

$.getScript("test.js")
.done(function( script, textStatus ) {
console.log( textStatus );
console.log( "Done callback executing now.")
})
.fail(function( jqxhr, settings, exception ) {
console.log("error." );
});

加载以下“test.js”脚本,该脚本会占用 UI 5 秒:

console.log("ajaxed script starting to execute.");
var newTime = new Date();
while (newTime - startTime < 5000) {
newTime = new Date();
}
console.log("elapsed time", newTime - startTime);
console.log("ajaxed script finished executing.");

在 FF 和 Chrome 中产生相同的可预测控制台输出:

ajaxed script starting to execute.
elapsed time 5000
ajaxed script finished executing.
success
Done callback executing now.

换句话说,在加载的脚本加载并执行之前,成功回调永远不会触发。这似乎是因为在 jQuery source 中,globalEval函数立即调用脚本:

converters: {
"text script": function( text ) {
jQuery.globalEval( text );
return text;
}
}

那么文档有错吗?如果它们是正确的,那么在什么特定情况下,成功回调会在执行脚本之前触发?

最佳答案

据我所知,查看源代码,我同意您的结论,即 promise 应该始终在脚本执行之后解决。

但是我的内存告诉我,注入(inject) <script> 有一些奇怪的地方。 jQuery 1.x 支持的众多浏览器之一中的标签 (s|ed) 。问题浏览器在脚本执行之前的某个时刻触发了加载的回调,否则我们不会在文档中添加有关它的注释。

我很确定 $.getScript 的实现从那时起已经发生了变化,文档中的问题行不再相关,无论哪种方式,我们都需要将问题提交给 jQuery 核心团队。你真的应该在 github 上打开一个问题- 请随时抄送@gnarf。

关于jQuery getScript 加载与执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21196617/

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