- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个插件,我想在其中加载一些脚本,并为每个脚本运行函数 plugin
。
我创建了一个set of tests/examples (代码如下)。
问题:
AJAX 传递常用的data、textStatus、jqxhr
参数集。但显然还创建了一个插件功能可用的范围。在文档中找不到任何有关此内容的信息。请提供更多详细信息/解释!
似乎在范围内的 this
到底是什么?
我通过映射脚本名称列表来运行 get 脚本的第三个示例按预期工作。
构建延迟列表,然后使用 when
运行,行为会很奇怪。我没有得到任何指示函数已经运行(没有输出),并且当我删除延迟时,它似乎总是首先完成(“完成”在其他所有内容之前打印)。功能是否正在运行?我尝试添加警报
,但当我使用when
时,它没有出现。
index.js
var script_names = ["one.js", "two.js", "three.js"];
function as_callback(script_name)
{
console.log("plugin function run as callback");
console.log(`$.getScript(${script_name}, (data, textStatus, jqxhr) => plugin());`);
$.getScript(script_name, (data, textStatus, jqxhr) => plugin());
console.log();
}
function from_this(script_name)
{
console.log("plugin function referred to from 'this'");
console.log(`$.getScript(${script_name}, (data, textStatus, jqxhr) => this.plugin());`);
$.getScript(script_name, (data, textStatus, jqxhr) => this.plugin());
console.log();
}
function with_map(script_names)
{
console.log("with map");
console.log("string_names: " + JSON.stringify(script_names));
console.log(`
script_names.map((x) =>
{
$.getScript(x, (data, textStatus, jqxhr) => plugin())
});
`);
script_names.map((x) =>
{
$.getScript(x, (data, textStatus, jqxhr) => plugin())
});
console.log();
}
function with_push_and_when(script_names)
{
console.log("build array of deferred and run with when");
console.log(`
var plugs = [];
script_names.map(x => $.getScript(x, (data, textStatus, jqxhr) => plugs.push(plugin)));
$.when(plugs).done(console.log("done"));
`);
var plugs = [];
script_names.map(x => $.getScript(x, (data, textStatus, jqxhr) => plugs.push(plugin)));
$.when(plugs).done(console.log("done"));
console.log();
}
as_callback('one.js');
setTimeout("from_this('two.js')", 2000);
setTimeout("with_map(script_names)", 4000);
setTimeout("with_push_and_when(script_names)", 6000);
var plugs = [];
script_names.map(x => $.getScript(x, (data, textStatus, jqxhr) => plugs.push(plugin)));
setTimeout("console.log('run when in global scope');$.when(plugs).done(console.log('done'))", 8000);
one.js
var plugin = function()
{
console.log("one.js\n\n");
// alert("one");
return "one";
}
two.js
var plugin = function()
{
console.log("two.js\n\n");
return "two";
}
三个.js
var plugin = function()
{
console.log("three.js\n\n");
return "three";
}
输出
plugin function run as callback
$.getScript(one.js, (data, textStatus, jqxhr) => plugin());
one.js
plugin function referred to from 'this'
$.getScript(two.js, (data, textStatus, jqxhr) => this.plugin());
two.js
with map
string_names: ["one.js","two.js","three.js"]
script_names.map((x) =>
{
$.getScript(x, (data, textStatus, jqxhr) => plugin())
});
two.js
three.js
one.js
build array of deferred and run with when
var plugs = [];
script_names.map(x => $.getScript(x, (data, textStatus, jqxhr) => plugs.push(plugin)));
$.when(plugs).done(console.log("done"));
done
run when in global scope
done
注意:我将接受的答案添加到了 repl.it。
最佳答案
加载脚本后,回调函数在全局上下文中运行。由于脚本定义了全局变量plugin
,因此可以从回调函数中访问它。
$.getScript
没有设置特定的上下文,因此 this
将是全局 window
对象。 this.plugin
与 window.plugin
相同,都是全局变量。
正确。
$.getScript
返回一个 promise ,但您没有将它们推送到 plugs
上,您只是推送 plugin
。
将 .map()
的结果分配给 plugs
以获取正确的 Promise 数组。
var plugs = script_names.map(x => $.getScript(x, (data, textStatus, jqxhr) => plugin()));
$.when(plugs).done(console.log("done"));
关于javascript - $.getScript 返回什么,它对范围有何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50049884/
假设我有“main.js”,在“main.js”中我使用 $.getScript() 加载“secondary.js” “main.js”内部有一个名为 function runme() 的函数。 有
我正在尝试使用获取 Google map 脚本的 $.getScript 函数加载两个脚本,然后加载后,我会得到另一个脚本 ( goMap ),这使得 map 小程序变得容易待制作。 但是,加载时,获
getScript docs说说成功回调: “一旦脚本加载但不一定执行回调就会被触发。” 但在我的测试中,这似乎并不正确。对于具有以下内容的主机页: var startTime = new Date(
单击后,将加载以下内容: $.getScript('/javascripts/contacts.js'); 我怎样才能写出这样的声明 如果上面的 getScript 已经加载,执行 X,如果没有加载,
我正在编写一个需要广泛使用 getScript 的引擎。为了便于使用,我已将其插入其自己的函数中,但现在我需要确保函数本身是同步的。不幸的是,我似乎无法让 getScript 等到它加载的脚本实际完成
我在网上找到了一些代码,可以帮助我向客户提供小部件。我对下面完整代码的理解是,它首先检测 jQuery 是否存在,否则加载它。作为我的小部件的一部分,我还想确保 fancybox 已加载,因为我基本上
如果我有 2 个 JS 文件,例如 a.js 和 b.js a.js $.getScript('some.js',function(){ //Call some function in some
为了加快网站的加载时间,我们推迟了某些脚本的加载。直到几天前,这一直运行良好。我已将问题归结为这个简短的 HTML 页面。
我正在尝试从中获取回调: $.getScript( 'http://gdata.youtube.com/feeds/api/videos/?v=2&alt=json-in-script', funct
我正在尝试加载具有如下函数的脚本: $.getScript('/js/mymy.js').done(function(){ if(readCookie('my_cookie', 'yes'))
我的 jquery getScript 函数有一个“imho”奇怪的问题。 $.getScript('jquery_ui.js', function (){}); // this code works
我对 Javascript 相当陌生,并且在 $.getScript 调用中未执行代码时遇到问题。我已经引用了Using $.getScript (jquery): code is not execu
由于 WordPress 在非冲突模式下加载 jQuery,我必须将脚本包装在 jQuery(function($){...}) 父脚本按预期执行。但是,我通过 getScript 有条件地加载第二个
是否可以将变量发送到使用 $.getScript 加载的脚本? 目前我有: $.getScript( "js/my_script.js", function() { // do something h
永远不会调用 jQuery getScript 失败函数。看看这个 fiddle : http://jsfiddle.net/getsetbro/8xNMs/ $.getScript("http://
我有一个外部 JavaScript 可以这样调用: 根据getScript,调用将是: $.getScript("https://ndd.com/script.js", function(data,
我知道代码有什么问题,但我无法理解为什么 jquery 会那样做,所以让我用下面的代码解释我的问题 test.html ############# Button test MAIN
我有一个设置函数,我想这样使用: async function setup() { // Load the TF libs, then on complete - create t
我正在尝试使用 getScript 在本地加载 javascript 文件,但它返回 404 错误。 test.js - 我正在尝试加载的脚本: var hello = function(){
var json.script 是一个数组。每个元素都是一个脚本路径,我想通过 $.getScript 加载它。它应该看起来像这样 - 但我不知道如何循环数组以获取每个数组元素: $.when(
我是一名优秀的程序员,十分优秀!