jQuery AJAX调用 - 如何保持评论

wae*_*oll 7 ajax jquery

上下文:对于JavaScript项目的开发版本,我编写了一个小实用程序来跟踪脚本文件依赖性(因为我不喜欢任何现有库的欢闹语法要求).我希望以类似于其他语言的方式使其工作,所以我决定解析导入的文件以获得如下评论:

// DEPENDS: myurl.js //
Run Code Online (Sandbox Code Playgroud)

使用jQuery的$ .ajax()构建和评估依赖关系图并获取依赖关系.这适用于顶级文件.但是,使用ajax调用删除的文件会被删除注释,因此我无法进一步解析依赖项.

为了您的兴趣:周期是

  1. 获取文件
  2. 用依赖关系的正则表达式解析内容
  3. 必要时扩展依赖图
  4. 从(1)开始,如果(3)发生(当然有必要的文件)
  5. 按顺序评估文件的脚本内容

问题:有没有办法阻止jQuery从$ .ajax()加载的文件中删除JavaScript注释标记?

代码:我用这种方式调用ajax

$.ajax({
  url: fileName,
  dataType: 'text',
  context: this,
  success: function(jqXHR) {
    this.parseImport(fileName, jqXHR);
  }
});
Run Code Online (Sandbox Code Playgroud)

(从提供fileName的方法内部来看,这是正确的).我希望dataType:'text'会强制jQuery从字面上导入文本,但是,它没有:-D

$ .ajax()的API文档告诉我,dataType:text元素的内容是用window.String解析的,但我不确定,window.String对它的输入做了什么.也许解决方案在这部分的某个地方?

如果有人能指出我正确的方向,我会很高兴的.

T.J*_*der 4

您使用的方式ajax不会从文件中删除注释。您要求 jQuery 从服务器加载文本。它将忠实地加载该文本,而不以任何方式修改它。我怀疑您在服务器端有一些缩小/压缩过程来删除注释。jQuery 代码不会。

但您仍然可以通过不使用注释来解决删除注释的问题。您可以使用字符串代替:

"DEPENDS: myurl.js";
Run Code Online (Sandbox Code Playgroud)

因为这不是评论,所以不应该被删除。乍一看有点奇怪,但 JavaScript 的语法有ExpressionStatement,它是一个完全由表达式组成的语句。当然,字符串文字本身就是一个有效的表达式。(这就是他们"use strict";在 ES5 中所做的,但不会给 ES5 之前的 JavaScript 引擎带来问题。)