jQuery AJAX调用 - 如何保持评论

时间:2015-05-07 08:27:51

标签: jquery ajax

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

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" 
                       httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
      <dataContractSerializer maxItemsInGraph="2147483647" />
    </behavior>
  </serviceBehaviors>
</behaviors>

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

为了您的兴趣:周期是

  1. 获取文件
  2. 使用正则表达式解析依赖项的内容
  3. 如果需要,则扩展依赖图
  4. 从(1)开始,如果(3)发生(当然是必需的文件)
  5. 按顺序评估文件的脚本内容
  6. 问题:有没有办法阻止jQuery从$ .ajax()加载的文件中删除JavaScript注释标记?

    代码:我这样调用ajax

    // DEPENDS: myurl.js //
    

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

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

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

2 个答案:

答案 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