【发布时间】:2011-10-07 06:36:59
【问题描述】:
我有一种情况,我必须在 Javascript 中使用 eval。是的,我知道它是邪恶的,但在这种情况下它是必需的,因为有两个必要条件:
- 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 包括包含该词的帖子的索引。当我在 eval 中评估 Javascript 时,问题就来了:
// 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] ]
....
}
问题:
- 当我使用 eval 评估上面显示的 javascript 时,firefox 告诉我它在第一行中的格式不正确。
- 然后我移除了 cmets。我认为 eval 会评估它,就好像它是一个普通的 Javascript 程序,但它似乎不接受 cmets(为什么?)。
- 删除 cmets 后,代码可以运行,但 Firefox 的 Javascript 控制台仍然告诉我第一行(定义 JSON 第一个变量)存在语法错误。为什么?
【问题讨论】:
-
在需要时加载 javascript 的常用方法是在 DOM 中插入一个新的 script 标签。是否有理由说明这对您的情况不起作用?
-
@cobbal,我先试过了。那一刻我可能做错了什么。我会再试一次,但它不起作用(我插入了脚本,但在下一个 javascript 行中找不到变量)。无论如何,
eval的问题仍然悬而未决。
标签: javascript json eval