У меня есть ситуация, в которой я должен использовать eval
в Javascript. Да, я знаю, что это зло, но в этом случае это необходимо, потому что два условия:
- Большой код Javascript.
- Его нужно оценивать (и загружать) только в нескольких ситуациях, поэтому я не хочу, чтобы скрипт загружался всегда, а по требованию.
С этими реквизитами я написал XMLHttpRequest для запроса кода (600 + K), и я хочу, чтобы этот код был выполнен немедленно. Как я покажу позже, скрипт содержит только данные для вставки в две переменные. Проблема состоит в том, что оценка этого javascript всегда терпит неудачу с синтаксической ошибкой. Если я поставлю код дословно (без eval), код выполняется нормально. Это минимальный пример. У меня есть search.js
файл, подобный этому:
// search.js for functional mind. Generated statically
// from the set of posts.
posts = { 'postlist' : ['<a href="XXX">YYY</a>', 'other link...' ] };
posts_for_word = { 'word1' : [0,1], 'word2' : [Z,K] };
Последняя переменная posts_for_word
включает в себя индексы постов, содержащих это слово. Проблема возникает, когда я оцениваю этот Javascript внутри eval:
// global environment
var posts = {}; // Initial value, empty
var posts_for_word = {}; // same
function() {
var request = // create XMLHTTPREQUEST request
var response = // obtain response (the javascript)
eval( response ); // <- syntax error
// access posts or posts_for_word
posts.postlist[ posts_for_word['word1'][0] ]
....
}
Проблемы:
- Когда я оцениваю javascript, показанный выше, с помощью eval, firefox сообщает мне, что он неправильно сформирован в первой строке.
- Затем я удалил комментарии. Я предполагал, что eval оценит его так, как если бы это была обычная программа Javascript, но, похоже, он не принимает комментарии (почему?).
- После удаления комментариев код работает , но консоль Javascript в Firefox все же сообщает мне, что в первой строке есть синтаксическая ошибка (определяющая первую переменную JSON). Почему?