Jquery两次加载脚本问题
我有一个函数,它使用ajax的速记功能在单击时加载相关的js函数 看起来是这样的:Jquery两次加载脚本问题,jquery,ajax,Jquery,Ajax,我有一个函数,它使用ajax的速记功能在单击时加载相关的js函数 看起来是这样的: $('#button').click(function() { $.getScript('/script.js'); $.ajax({ type: 'GET', url: '/file.php', cache: false, success: function(data) { $('#window').ht
$('#button').click(function() {
$.getScript('/script.js');
$.ajax({
type: 'GET',
url: '/file.php',
cache: false,
success: function(data) {
$('#window').html(data);
}
});
});
这很好用。。。直到我再次单击#按钮,getScript再次加载script.js,这意味着script.js中的任何函数都不会被触发一次,而是两次
这是一个缓存问题,由于$.getScript()只是$.ajax()的简写,而且默认情况下,ajax请求不缓存脚本,因此应该使用“cache:true”执行长版本
所以我试着:
$('#button').click(function() {
$.ajax({
url: 'script.js',
dataType: 'script',
cache: true,
success: function(data) {
$.ajax({
type: 'GET',
url: '/file.php',
cache: false,
success: function(data) {
$('#window').html(data);
}
});
}
});
});
不幸的是,我仍然处在同一条船上,每次我单击#按钮,script.js中的所有函数都会被一次又一次地追加
一个人该怎么办?如何只加载一次脚本,和/或检查资源是否已加载,如果已加载,请不要麻烦再次加载所有脚本?//在doc ready的范围内,因此加载的
不是全局的:
var loaded = false;
$('#button').click(function() {
if ( !loaded ) {
$.getScript('/script.js', function() {
loaded = true;
});
}
$.ajax({
type: 'GET',
url: '/file.php',
cache: false,
success: function(data) {
$('#window').html(data);
}
});
});
//在单据准备就绪的范围内,因此加载的不是全局的:
var loaded = false;
$('#button').click(function() {
if ( !loaded ) {
$.getScript('/script.js', function() {
loaded = true;
});
}
$.ajax({
type: 'GET',
url: '/file.php',
cache: false,
success: function(data) {
$('#window').html(data);
}
});
});
我懂了。这个解决方案的简单性和明显性让我感到惭愧。如果第二个ajax请求只需要在加载script.js
之后发生,请将其放入第一个回调函数中,该函数具有load=true
。我明白了。这个解决方案的简单性和明显性让我感到谦卑。如果第二个ajax请求只需要在加载script.js
之后发生,请将其放入第一个回调函数中,该函数具有load=true
。