Jquery两次加载脚本问题

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

我有一个函数,它使用ajax的速记功能在单击时加载相关的js函数

看起来是这样的:

$('#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