- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在另一个 js 文件中使用来自外部 js 文件的 javascript 函数。这基本上是我试过的代码:
$.getScript('js/myHelperFile.js');
myHelperFunction();
$.getScript('js/myHelperFile.js', function(){myHelperFunction();});
最佳答案
使用 jQuery.getScript
目前*不可能做到“第一种方式”因为它只支持异步操作,所以调用后立即返回。
因为当脚本尝试调用 myHelperFunction()
时,它会在您的脚本下载之前返回。 , myHelperFunction
是 undefined
并导致该错误。
*请参阅此答案底部的更新,了解一种有前途的新方法,该方法最终将允许您编写几乎符合您所需风格的代码。
您可以使用 jQuery.ajax
来做到这一点与 async
设置设置为 false
代码是这样的:
$.ajax({
url: 'js/myHelperFile.js',
async: false,
dataType: "script",
});
myHelperFunction();
synchronous requests may temporarily lock the browser, disabling any actions while the request is active.
myHelperFile.js
的服务器在任何时候响应都很慢(
将 在某个时刻发生)页面将变得无响应,直到请求完成或超时。
$.getScript('js/myHelperFile.js', function () {
myHelperFunction();
});
function doStuffWithHelper() {
myHelperFunction();
}
$.getScript('js/myHelperFile.js', doStuffWithHelper);
myHelperFunction
之前需要加载多个依赖项除非您设置某种系统来确定是否在执行代码之前下载了所有依赖项,否则这将不起作用。然后,您可以在所有
.getScript
上设置回调处理程序。在运行代码之前调用以检查所有依赖项是否已加载。
var loadedScripts = {
myHelperFile: false,
anotherHelperFile: false
};
function doStuffWithHelper() {
// check to see if all our scripts are loaded
var prop;
for (prop in loadedScripts) {
if (loadedScripts.hasOwnProperty(prop)) {
if (loadedScripts[prop] === false) {
return; // not everything is loaded wait more
}
}
}
myHelperFunction();
}
$.getScript('js/myHelperFile.js', function () {
loadedScripts.myHelperFile = true;
doStuffWithHelper();
});
$.getScript('js/anotherHelperFile.js', function () {
loadedScripts.anotherHelperFile = true;
doStuffWithHelper();
});
yepnope( {
load : [ 'js/myHelperFile.js', 'js/anotherHelperFile.js' ],
complete: function () {
var foo;
foo = myHelperFunction();
foo = anotherHelperFunction(foo);
// do something with foo
}
} );
.getScript
所以你不能使用你想要坚持的顺序样式。这是一个很好的权衡,因为做多个同步
jQuery.ajax
连续调用只会加剧该方法的问题。
$.getScript('js/myHelperFile.js').done(function () {
myHelperFunction();
});
$.when($.getScript('js/myHelperFile.js'), $.getScript('js/anotherHelperFile.js')).done(function () {
var foo;
foo = myHelperFunction();
foo = anotherHelperFunction(foo);
// do something with foo
});
await
暂停执行
async
的关键字直到异步操作完成。坏消息是它目前计划包含在 ES7 中,还有两个 ECMAScript 版本。
await
依赖于您正在等待的异步函数返回
Promise .我不确定浏览器实现的行为,如果它们需要一个真正的 ES6 Promise 对象,或者其他 Promise 实现(如 jQuery 从 AJAX 调用返回的一个)是否就足够了。如果需要 ES6 Promise,则需要包装
jQuery.getScript
带有返回 Promise 的函数:
"use strict";
var getScript = function (url) {
return new Promise(function(resolve, reject) {
jQuery.getScript(url).done(function (script) {
resolve(script);
});
});
};
await
在继续之前:
(async function () {
await getScript('js/myHelperFile.js');
myHelperFunction();
}());
asyc
和
await
然后使用
Traceur将您的代码转换为可在当前浏览器中运行的代码。这样做的额外好处是您还可以使用许多
other useful new ES6 features也是。
关于jquery - 我可以在没有回调的情况下使用 jquery getScript() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8026191/
假设我有“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(
我是一名优秀的程序员,十分优秀!