Отказ от ответственности: Я довольно плохо знаком с Ajax!
Я озирался, и я не уверен который метод использовать для загрузки JavaScript с помощью ajax.
Я использую ajax для запроса страниц, что каждый требует их собственных 6-10 сокращенных методов. Всего будет, возможно, 5-6 из этих страниц, таким образом, приблизительное общее количество 35 + методы.
Я предпочел бы получать доступ к необходимому JavaScript как к каждой странице, которая требует, чтобы это загрузилось.
Я видел несколько методов, и я не уверен, какой лучше всего удовлетворил бы моим потребностям:
Включайте пустой элемент сценария в голову и управляйте атрибутом src через. DOM.
Создайте новый элемент сценария через. DOM и добавляют его к document.body (это звучит как то же как как № 1).
Поскольку я плохо знаком с ajax и веб-разработкой в целом, мне любопытно относительно взлетов и падений каждого метода, а также любых методов, которые я пропустил.
Некоторые проблемы: - будет кэшируемая копия использоваться, или будет сценарий загружать каждый раз, когда запрос ajax выполнен. Обратите внимание, что сценарии будут статичны. - совместимость браузера. Я использую Chrome, но это приложение будет использоваться через версии IE> = 7, а также Firefox.
В среде jQuery я бы использовал getscript()
. Вы правы, задаваясь вопросом о кэше - getscript
включает функцию разрушения кэша (предназначенную в первую очередь для борьбы с агрессивным кэшированием IE, хотя, конечно, полезную и в других сценариях). Вы можете выполнить эквивалент getscript
без использования кэша следующим образом:
$.ajax({
cache: true,
dataType: "script",
url: "your_js_file.js",
success: yourFunction
});
Используйте getScript
. По сути, он делает то же самое, что и второй метод, но вам не нужно беспокоиться о том, как прослушивать загрузку в различных браузерах (в основном IE).
Ответ AJAX - это просто текст в DOM. Он не имеет никакого эффекта, пока вы каким-то образом не вставите его в DOM.
Поскольку все остальные ответы здесь просто говорят "используйте jquery" без какой-либо дополнительной информации/объяснения/обоснования, вероятно, стоит действительно посмотреть на другие варианты, которые вы упомянули.
может быть немного сложным, так как он требует, чтобы вы ждали, пока один скрипт загрузится и запустится, прежде чем получить следующий (так как у вас только один элемент скрипта).
лучше, так как вы можете добавить второй элемент скрипта в DOM до того, как первый закончит загрузку, не влияя на загрузку/выполнение.
рекомендованный всеми до меня, подходит, если вы находитесь в среде jQuery и уже загружаете (довольно тяжелую) библиотеку jQuery для других целей - загружать ее только для этого явно излишне. Также стоит отметить, что $.getScript()
и $.ajax()
оба используют eval()
для выполнения скрипта. eval()
не является "злом" в данном контексте, поскольку это надежный источник, но, по моему опыту, иногда бывает немного сложнее отлаживать eval()-код.
афаик невозможен.
рекомендованный Ником Крейвером в первом комментарии OP, это то, что я бы выбрал, bbh - если скрипты статичны, как вы говорите, кэширование будет более эффективным, чем несколько HTTP-запросов. Вы также можете рассмотреть возможность использования cache.manifest для агрессивного кэширования, если вас особенно беспокоит пропускная способность: http://www.html5rocks.com/tutorials/appcache/beginner/