Загрузка скриптов с использованием jQuery - PullRequest
1 голос
/ 21 мая 2010
$.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 ]

5 голосов
/ 21 мая 2010

Вам нужно использовать getScript, а не ajax. Ajax предназначен для загрузки данных, а не для выполнения кода.

Если вам нужно загрузить несколько файлов, попробуйте что-то вроде этого:

var scripts = ['plugin.js', 'test.js'];
for(var i = 0; i < scripts.length; i++) {
  $.getScript(scripts[i], function() {
    alert('script loaded');
  });
}
3 голосов
/ 21 мая 2010

1) Путь будет относительно страницы , с которой он загружен (не путь вашего скрипта инициализации), поскольку это URL, по которому будет работать браузер при выполнении запроса ajax.

Редактировать : В зависимости от вашего редактирования путь для загрузки вашего скрипта может быть либо /static/js/plugin.js (если он будет развернут в корне вашего домена), либо ../static/js/plugin.js для безопасности (при условии, что все страницы, с которых он будет загружен, будут в /html).

2) Нет. Если они находятся в разных файлах, они должны быть разными запросами. Вы можете объединить их в один файл на стороне сервера, хотя ...

1 голос
/ 13 марта 2013

В качестве обновления, лучший способ сделать это с помощью jQuery 1.9.x - это использовать Deferreds-методы (например, $ .when), такие как:

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

Функция обратного вызова .done() имеет ряд полезных параметров.

Прочитайте документацию: http://api.jquery.com/jQuery.when/

0 голосов
/ 19 ноября 2014

Вы можете использовать '../', чтобы установить путь к сценарию в качестве базового. Затем добавьте относительный путь для

    $.getScript("../plugin.js").done(function(script, textStatus ) {
    alert("loaded:" + textStatus);
}).fail(function(script, textStatus ) {
    alert("failed: " + textStatus);
});
0 голосов
/ 21 мая 2010

Я бы посмотрел на вкладку net в Firebug, чтобы увидеть, правильно ли он был загружен, и путь, с которого он пытается загрузить.

Путь будет из документа, в который был включен JavaScript.

Я также сохраняю объект конфигурации таким образом (PHP в этом примере)

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

Тогда вы могли бы сделать

var request = config.basePath + 'path/to/whatever.js';
0 голосов
/ 21 мая 2010

Проверьте функцию jQuery .getScript , которая загрузит скрипт и включит его в текущий документ.

1) Путь должен быть /static/js/plugin.js относительно вашего документа.

2) Нет. Каждый файл загружается по одному HTTP-запросу.

...