【问题标题】:How do you include a javascript file on the server side using classic ASP?如何使用经典 ASP 在服务器端包含 javascript 文件?
【发布时间】:2016-02-20 06:35:14
【问题描述】:

如果有人能告诉我这个名为“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。

【问题讨论】:

  • 您需要使用服务器端包含语法(对不起,我不记得那是什么经典的 ASP)。正如您所做的那样,使用引用 JS 文件的脚本元素将使页面的那部分返回给浏览器,然后浏览器将加载这些脚本。您当然不能在服务器端生成alert()。为什么不运行 JS 客户端呢?
  • jquery 不打算在服务器端运行(尽管有黑客攻击)。这段代码不会像你想象的那样做,因为服务器会忽略&lt;% 标记之外的所有内容。即使您设法让服务器识别 jquery 脚本,它也不会运行。基本上,将您的服务器端 &lt;% 块转换为客户端 script 块。但是,您将根本没有任何服务器端处理;这一切都将在客户端完成。
  • 谢谢。如果我的客户端是智能手机本机应用程序(不是智能手机的 Web 浏览器),它期望从我的 test.asp 文件返回 JSON,那么我有什么选择?不幸的是,我坚持使用经典的 asp。
  • @user798719 -- 看看这个:stackoverflow.com/questions/6977261/… 基本上我只是用谷歌搜索了“从 asp 中返回 json”,这应该让你开始。祝你好运!

标签: javascript xml json asp-classic


【解决方案1】:

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

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

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

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

那么,在这种情况下,在服务器上包含一个客户端 JavaScript 库的想法,礼貌地说是错误的。您真正能得到的最接近的是在像Node.js 这样的“纯”JavaScript 的服务器平台上;但即使这样也无法运行像 jQuery 这样的客户端库,因为它们依赖于浏览器提供的运行时环境。是的,这可能是“伪造的”和“存根的”;但不是为了任何真正的利益。

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

【讨论】:

  • 非常感谢。我开始怀疑这一点——像 xml2json 和 XMLObjectifier 这样的东西不能在服务器上使用。用例是智能手机调用 test.asp,test.asp 使用 Response.Write() 本地返回 xml。我只需要 test.asp 来返回 JSON。因为客户端是智能手机,并且是本机应用程序而不是智能手机的浏览器,所以我认为我不能使用 xml2json。我需要使用 XSL 样式表转换为 JSON 是否正确?这是我唯一的选择吗?
  • XSL 绝对是一种选择——我个人不喜欢编写它,但它绝对是我所知道的最简单的方法。
  • 再次感谢。就我和其他人的知识而言,您能否列出您正在考虑的其他一些选项?
【解决方案2】:

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

Babel 有一个JScript transform,可以让您将代码转换为 JScript 的附加级别(我为 Classic ASP 捆绑包转换了 ES2016 -> ES5 -> JScript)。

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

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

include/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>

include/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 很糟糕)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多