代码之家  ›  专栏  ›  技术社区  ›  eozzy

使用jquery加载脚本

  •  1
  • eozzy  · 技术社区  · 15 年前
    $.ajax({ url: "plugin.js", dataType: 'script', cache: true, success: function() {
        alert('loaded');
    }});
    

    1)我无法加载脚本,可能是因为路径不正确,但如何确定正确的路径?上述代码在init.js中,plugin.js也在同一文件夹中。

    2)我可以用同一个请求同时加载多个插件吗?例如plugin.js,anotherplugin.js?

    root
    |
    |_ html > page.html
    |
    |_ static > js > init.js, plugin.js
    

    谢谢你的帮助

    6 回复  |  直到 11 年前
        1
  •  5
  •   Ben Rowe    15 年前

    您需要使用getscript,而不是ajax。Ajax用于加载数据,而不是执行代码。

    如果需要加载多个文件,请尝试如下操作:

    var scripts = ['plugin.js', 'test.js'];
    for(var i = 0; i < scripts.length; i++) {
      $.getScript(scripts[i], function() {
        alert('script loaded');
      });
    }
    
        2
  •  3
  •   Alconja    15 年前

    1)路径将相对于 它是从(而不是init脚本的路径)加载的,因为这是浏览器在执行Ajax请求时所处的URL。

    编辑 :根据您的编辑,加载脚本的路径为 /static/js/plugin.js (如果它将部署在域的根目录下),或者 ../static/js/plugin.js 为了安全起见(假设将从中加载它的所有页面都将位于 /html )

    2)没有。如果它们在不同的文件中,它们需要不同的请求。不过,您可以将它们合并到服务器端的一个文件中…

        3
  •  1
  •   Joshua    12 年前

    作为更新,使用jquery 1.9.x执行此操作的更好方法是使用deferred方法(即$.when),如下所示:

    $.when(
      $.getScript('url/lib.js'),
      $.getScript('url/lib2.js')
    ).done(function() {
      console.log('done');
    })
    

    这个 .done() 回调函数有许多有用的参数。

    阅读文档: http://api.jquery.com/jQuery.when/

        4
  •  0
  •   Emil Vikström    15 年前

    查看jquery .getScript 函数,它将加载脚本并将其包含在当前文档中。

    1)路径应该是 /static/js/plugin.js ,相对于您的文档。

    2)没有。每个文件都由一个HTTP请求加载。

        5
  •  0
  •   alex    15 年前

    我会查一下Firebug的 选项卡查看它是否正确加载,以及它试图从中加载的路径。

    路径将来自包含javascript的文档。

    我还保留这样的配置对象(本例中的php)

    var config = { basePath: '<?php echo BASE_PATH; ?>' };
    

    那你就可以了

    var request = config.basePath + 'path/to/whatever.js';
    
        6
  •  0
  •   d.popov    11 年前

    你可以使用 '../' 将脚本路径设置为基本路径。然后添加

        $.getScript("../plugin.js").done(function(script, textStatus ) {
        alert("loaded:" + textStatus);
    }).fail(function(script, textStatus ) {
        alert("failed: " + textStatus);
    });