我正在尝试动态加载JS脚本,但使用jQuery不是一个选项.
我检查了jQuery源代码以了解如何实现getScript,以便我可以使用该方法使用本机JS加载脚本.但是,getScript只调用jQuery.get()
而且我无法找到get方法的实现位置.
所以我的问题是,
使用本机JavaScript实现自己的getScript方法的可靠方法是什么?
谢谢!
我有一堆JavaScript文件,我想在页面中包含,但我不想继续写
<script type="text/javascript" src="js/file.js"></script>
Run Code Online (Sandbox Code Playgroud)
那么有没有办法将所有文件都包含在目录中(未知大小)?我能做点什么......
$.getScript("js/*.js");
Run Code Online (Sandbox Code Playgroud)
...获取"js"目录中的所有JavaScript文件?我怎么能用jQuery做到这一点?
默认情况下,$ .getScript()禁用缓存,您可以使用$ .ajaxSetup并将缓存设置为true.当测试脚本是否实际上是用Firebug缓存时,脚本大部分时间都会返回200(这意味着脚本是一个新的副本),一个可能20或30次,它将返回304(意味着它使用了缓存)版).为什么绝大部分时间都会收到新版本?
$.ajaxSetup({
cache: true
});
$.getScript( scriptFile );
Run Code Online (Sandbox Code Playgroud)
尚未编辑getScript检索的文件,并且请求是页面更改.
我正在开发一个通过AJAX提供内容的网站.
如果单击菜单中的某个项目,内容div将更新为$.get
响应,没有任何花哨.
我正在实现history.pushState
允许使用浏览器的后退/前进按钮进行导航.
我有以下内容在历史导航中加载内容:
$(function() {
$(window).bind("popstate", function() {
$.getScript(location.href);
});
});
Run Code Online (Sandbox Code Playgroud)
问题是,当第一次加载页面时,此功能会$.getScript
立即再次加载页面.第一次加载页面时,它会呈现初始HTML视图,然后在第二次加载时呈现JS视图,因为它是一个JS请求.
如何防止此事件在具有HTML请求的页面上触发?
我正在编写一个需要广泛使用getScript的引擎.为了便于使用,我已将其推入自己的功能,但现在我需要确保函数本身是同步的.不幸的是,我似乎无法让getScript等到它加载的脚本在继续之前实际完成加载.我甚至尝试在调用之前将jQuery的ajax asynch属性设置为false.我正在考虑使用jQuery的when/done协议,但我似乎无法理解将其置于函数内并使函数本身同步的逻辑.任何帮助将非常感谢!
function loadScript(script){
//Unrelated stuff here!!!
$.when(
$.getScript(script,function(){
//Unrelated stuff here!!!
})).done(function(){
//Wait until done, then finish function
});
}
Run Code Online (Sandbox Code Playgroud)
循环代码(按要求):
for (var i in divlist){
switch($("#"+divlist[i]).css({"background-color"})){
case #FFF:
loadScript(scriptlist[0],divlist[i]);
break;
case #000:
loadScript(scriptlist[2],divlist[i]);
break;
case #333:
loadScript(scriptlist[3],divlist[i]);
break;
case #777:
loadScript(scriptlist[4],divlist[i]);
break;
}
}
Run Code Online (Sandbox Code Playgroud) 我需要在另一个js文件中使用外部js文件中的javascript函数.这基本上是我尝试过的代码:
$.getScript('js/myHelperFile.js');
myHelperFunction();
Run Code Online (Sandbox Code Playgroud)
这不起作用 - 我收到"myHelperFunction未定义"的错误.
但是,此代码有效:
$.getScript('js/myHelperFile.js', function(){myHelperFunction();});
Run Code Online (Sandbox Code Playgroud)
我特别希望能够以第一种方式完成它 - 将文件加载到我的文件顶部,然后使用我需要的任何函数.这是可能的,还是我误解了getScript的工作原理?
无法弄清楚如何主题ajax加载recaptcha.以下代码不起作用.
来自Google Recaptcha
看到这篇文章Recaptcha ajax API自定义主题不起作用,但我肯定在localhost中查看和recaptcha工作正常,只是没有改变主题.
任何人都有关于如何让白色主题工作的建议?
<script type='text/javascript'>
var RecaptchaOptions = {
theme : 'white'
};
</script>
<div id="recaptcha_content">
<noscript>
<iframe src="http://www.google.com/recaptcha/api/noscript?k=6Ldr7woAAAAAADa_69Mr-EZKAeYyEx9N08q" height="300" width="500" frameborder="0"></iframe><br />
<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
<input type='hidden' name='recaptcha_response_field' value='manual_challenge' />
</noscript>
</div>
<script type="text/javascript">
$(document).ready(function() {
$.getScript('http://www.google.com/recaptcha/api/js/recaptcha_ajax.js',
function() {Recaptcha.create("6Ldr7woAAAAAADa_69Mr-EZKAeYyEx9N08q", "recaptcha_content");
});
});
</script>
Run Code Online (Sandbox Code Playgroud) 我目前正在使用几个必须以非常特定的顺序加载的JavaScript库.由于jQuery的getScript()是异步的,因此它可以非常快速地下载所有脚本,并在完成后执行它们.由于它们没有按顺序执行,因此我从库中获得了多个错误.
不幸的是,我无法更改或修改任何这些库.我试图做的是使用一种下载JavaScript库的方法,并在回调中让它调用自己,直到它完成加载所有库.
这适用于第一个文件.当第二个文件出现时,它会丢失回调内的上下文,我不能再调用我的递归方法了.
有任何想法吗?
代码的配对版本:
function loadFiles (CompletedCallback) {
var Files = getFiles(); // This is an array of js files to load
var currentFileIndex = 0;
function processFile (file) {
$.getScript(file[currentFileIndex], $.proxy(function () {
++currentFileIndex;
if (currentFileIndex === Files.length) {
CompletedCallback();
} else {
processFile(Files[currentFileIndex]);
}
}, this);
};
processFile(Files[currentFileIndex]);
};
Run Code Online (Sandbox Code Playgroud) 似乎helloworld.js
根据我点击的次数加载多次#load
.我这样说是因为当我查看Google Chromes开发人员工具网络标签时,它会显示helloworld.js
我点击的次数#load
.
$(document).ready(function() {
$("#load").click(function(){
$.getScript('helloworld.js', function() {
hello();
});
});
});
Run Code Online (Sandbox Code Playgroud)
该hello()
函数如下所示:
function hello(){
alert("hello");
}
Run Code Online (Sandbox Code Playgroud)
是否可以检测是否helloworld.js
已经加载?
因此,如果它尚未加载,则加载它,如果已加载,则不加载它.
如果我单击#load
按钮4次,这就是Developer Tools当前显示的内容:
javascript jquery google-chrome internet-explorer-8 getscript
我有一个jQuery函数,在列表项双击后调用.
应用程序/资产/ Java脚本/瓦/ tile.js
$('#list > li').dblclick(function(){
// styling
$(this).toggleClass('liked');
// pass ID to controller
var movie_id = $(this).attr("data-id");
$.getScript("/likes.js");
});
Run Code Online (Sandbox Code Playgroud)
在将一些新格式应用于所述项目之后,我的主要目标是从我的like
控制器创建数据库条目.在这个Railscast中,index
来自comments
控制器的动作通过这个简单的行被调用.
$.getScript("/comments.js");
Run Code Online (Sandbox Code Playgroud)
另外,一些JavaScript从index.js.erb
文件中调用.
理解Railscasts示例代码的第一个问题是它们如何定义动作.如果我想createLike
从我的电话中调出这个动作likes_controller
怎么称呼它?
其次,到目前为止我的尝试都失败了,因为JavaScript文件都没有加载,并且动作也没有被调用.
不知何故,我感觉到我已经搞砸了路径.我应该在哪里找到应该使用该getScript
函数调用的JavaScript文件?
应用程序/资产/ JavaScript的/喜欢/ index.js.erb的
console.log("Test");
Run Code Online (Sandbox Code Playgroud)
应用程序/控制器/ likes_controller.rb
class LikesController < ApplicationController
protect_from_forgery
def index
Like.create(:user_id => current_user.id, :item_id => params[:id])
end
end
Run Code Online (Sandbox Code Playgroud)