context:对于JavaScript项目的开发版本,我编写了一个小实用程序来跟踪脚本文件依赖性(因为我不喜欢任何现有库的欢闹语法要求)。我想以类似于其他语言的方式使其工作,所以我决定解析导入的文件以获得如下评论:
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"
httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<dataContractSerializer maxItemsInGraph="2147483647" />
</behavior>
</serviceBehaviors>
</behaviors>
使用jQuery的$ .ajax()构建和评估依赖关系图并获取依赖关系。这适用于顶级文件。但是,使用ajax调用删除的文件会被删除注释,因此我无法进一步解析依赖项。
为了您的兴趣:周期是
问题:有没有办法阻止jQuery从$ .ajax()加载的文件中删除JavaScript注释标记?
代码:我这样调用ajax
// DEPENDS: myurl.js //
(从正确提供 fileName 和此的方法内部)。我希望 dataType:'text'会强制jQuery从字面上导入文本,但是,它没有:-D
$ .ajax()的API文档告诉我, dataType:text 元素的内容是用 window.String 解析的,但我不确定,什么 window.String 对其输入做了什么。也许解决方案在这部分的某个地方?
如果有人能指出我正确的方向,我会很高兴。
答案 0 :(得分:4)
您使用ajax
的方式不会从文件中删除评论。你要求jQuery从服务器加载文本。它将忠实地加载该文本,而无需以任何方式修改它。我怀疑你在服务器端有一些缩小/压缩过程,删除了注释。那个jQuery代码不会。
但你可以通过不使用评论来解决任何删除评论的问题。您可以改为使用字符串:
"DEPENDS: myurl.js";
由于这不是评论,因此不应该被删除。起初看起来有点奇怪,但JavaScript的语法有 ExpressionStatement ,这是一个完全由表达式组成的语句。当然,字符串文字本身就是一个有效的表达式。 (这就是他们在ES5中"use strict";
的做法,而不会导致ES5之前的JavaScript引擎出现问题。)
答案 1 :(得分:0)
带字符串的解决方案很好,但我真的相信还有另一个好的解决方案。
只需定义你的ajax引擎,例如&#34;的MyScript&#34;与ajaxTransport
。例如。看this link:你可以注册你的方法,它将以你喜欢的方式返回一切;此外:您可以直接在传输中解析注释并将依赖关系作为数组返回。
这将封装您的解析方法并将它们构建为ajax调用,就像它是您自己的JavaScript文件标准一样。
要了解更多信息(实际上他们缺少示例),请参阅see jQuery docs