如何使用经典ASP在服务器端包含javascript文件?

时间:2012-07-11 07:12:08

标签: javascript xml json asp-classic

如果有人能告诉我这个名为“test.asp”的文件中这个相当简单的代码有什么问题?

<script src="jquery-1.2.6.js" type="text/javascript" language="javascript" runat="server"></script>
<script src="jquery.xml2json.js" type="text/javascript" language="javascript" runat="server"></script>

<%
var xml = '<xml><message>Hello world</message></xml>';
var json = $.xml2json(xml);
alert(json.message);
%>

我收到的错误消息是Microsoft JScript运行时错误

'$'未定义

我尝试过XMLObjectifier以及xml2json.js,常见的主题是我似乎无法在我的经典ASP文件中执行这些javascript库。

我的理解是,编写ASP的JScript是javascript ...只是在服务器端。那么我可以在test.asp文件中运行/引用.js文件吗?

非常感谢!如您所知,我的asp文件生成xml,但我想将其转换为json。

2 个答案:

答案 0 :(得分:3)

  

请注意 - 我并没有忽略JScript可以在浏览器中使用的事实,因为这个答案的优秀信息:What's the difference between JavaScript and JScript?。这个问题显然是在服务器的上下文中讨论JScript,所以从这里开始,术语是“JScript&#39;表示在ASP或Windows脚本中使用的JScript版本

两个 语言 可以相同/相似(尽管请注意JScript 不完全 JavaScript),但它们的运行时环境可能完全不同

您尝试使用这些库的JavaScript是一种客户端脚本语言,希望在浏览器中运行。然后,浏览器就是此代码的运行时环境,提供HTML规范中列出的对象和服务(例如,内部windowdocument对象。)

JScript是一种类似javascript的语言,在这种情况下,它希望在服务器上(或在Windows脚本环境中)运行 - 即在与浏览器完全不同的运行时环境中运行

在这种情况下,在服务器上包含客户端javascript库的想法是错误的,不能礼貌地说。你真正得到的最接近的是在Node.js这样的服务器平台上,它是纯粹的&#39; JavaScript的;但即便如此,它也不能运行像jQuery这样的客户端库,因为它们依赖于浏览器提供的运行时环境。是的,那可以是伪造的&#39;和&#39; stubbed&#39 ;;但不是为了任何真正的好处。

停止尝试这样做,并将其重写为普通的客户端代码。

答案 1 :(得分:0)

我使用JScript在现代的React(节点)项目,传统的经典ASP项目和老化的Web表单项目之间进行交互。经典ASP在服务器上使用JScript的能力非常有用。我能够集中经典ASP,Web表单和节点(反应)项目之间的所有设置(api,连接字符串,应用程序设置等)。一旦他们都读取相同的设置,我删除了他们各自的web.config设置

Babel有一个JScript transform,可让您将代码转换为JScript的额外级别(我编译了ES2016 - &gt; ES5 - &gt;经典ASP软件包的JScript)。

include / config.js(babel生成的设置)

var config = {
    "cdnBaseUrl": "https://api.example.com",
    "apis": { ... },
    ...
}

包含/ config.asp里

' Import the global JSON object from crockford to parse JSON in VBScript server-side
<script language="JScript" runat="server" src="json2.js"></script>

' Import global config object that can be called from JScript and VBScript interchangeably
<script language="JScript" runat="server" src="config.js"></script>

<script language="JScript" runat="server">
  /** DEFINE GLOBAL FUNCTIONS THAT CAN INTEROP WITH VBSCRIPT HERE */

  function requireScript(path) {
      var resourceUrl = config.cdnBaseUrl + path
      return ('<sc' + 'ript src="' + resourceUrl + '"></sc' + 'ript>')
  }

  ....
</script>

包含/ AppHead.asp

<!-- Include the settings and global helpers -->
<!--#include virtual="/include/Config.asp"-->

<!-- Build script tags in head that point to the correct CDN base url -->
<%=requireScript("/assets/react-client.js")%>

为所有设置编写适配器会是一种折磨(用VBScript解析XML / JSON很糟糕)。