使用 Classic ASP/ 创建服务器端 REST API 时遇到问题
Having a problem while creating a server-side REST API using Classic ASP/
虽然没有太多详细信息可以详细说明用 VBScript 编写的 Rest API 服务器端发生的情况,但有一篇文章解决了这个问题:Can I build a REST application using ASP Classic?。
post 的大部分描述了有关 JSON 字符串化以及从数据库获取数据的各种问题。我的问题不涉及这些。但是忽略这些(以及一些语法错误),post.
中几乎没有其他内容
因此,我承认在服务器端行为方面我是一个新手。但是当我从上面提到的 post 中剥离所有内容时,我只剩下几行代码,这些代码似乎只是请求一个输入值,然后输出一个字符串。所以我想知道这是否真的是基本 I/O 所涉及的全部内容(即忽略安全和格式问题)。我决定试试这个。我的结果令人费解。当我调用这个非常简单的 API,而不是接收发送的非常简单的 JSON 字符串时,我取而代之的是从开头取回包含 API 的整个源代码HTML 标记结束。我显然犯了一个非常根本的错误。
这是我的代码。首先,这是极其简单的 REST API 本身(请注意:这只是回写一个人工的 JSON 字符串。它甚至不关心接收 POST 参数。)这是“simplerest.asp”
<html>
<head>
</head>
<body>
<%
Response.Write("{" & Chr(34) & "SomeCert" & Chr(34) & ":" & Chr(34) & "12345"& Chr(34) & "}")
%>
</body>
</html>
这里是调用此“API”(testrest.asp) 的代码(利用 jQuery):
<html>
<head>
<script type="text/javascript" src="/./include/jquery-3.4.1.min.js"></script>
</head>
<body>
<script type="text/javascript">
function getCert(certNumber)
{
var settings = {
"async": true,
"crossDomain": true,
"url": "example.com/simplerest.asp",
"method": "GET",
"success": function (response) {
alert("success");
},
"headers": {
"Accept": "application/json"
}
}
$.ajax(settings).done(function (response) {
certvals = response;
alert("certvals is " + certvals);
});
}
getCert("dummy");
</script>
</body>
</html>
如上所述,当我运行调用逻辑时,certvals
中返回的是整个“API”代码的精确ASCII表示。本着我正在尝试的精神,即以最基本的模式查看 API 运行ning,有人能告诉我我犯了什么愚蠢的错误吗?
并在您的网站 (IIS) 中启用,使用;
<%
'Tell client you are sending JSON
Response.ContentType = "application/json"
Call Response.Write("{""SomeCert"":""12345""}")
%>
因为您将 JSON 封装在 HTML 结构中,它只是在 HTML 页面中作为字符串输出。
此外,当您可以通过加倍来转义字符串中的双引号时,就不需要 Chr(34)
。
关于 ,这是一个使用 IIS 本地实例测试的完整示例。
<html>
<head>
<title></title>
</head>
<body>
<button id="buttonSend">Send</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>
$("#buttonSend").on("click", function() {
getCert("dummy");
});
function getCert(certNumber)
{
var settings = {
"async": true,
"crossDomain": true,
"url": "example.com/simplerest.asp",
"method": "GET",
"success": function (response) {
alert("success");
}
}
$.ajax(settings).done(function (response) {
certvals = response;
alert("certvals is " + certvals.SomeCert);
});
}
</script>
</body>
</html>
输出(两条消息):
success
certval is 12345
有用的链接
- How to guide for getting a classic asp application working under IIS 7.0
- ASP Classic setup issues
- I have already enabled classic asp support on IIS for windows 7, and configured IIS web for classic asp,Yet .asp page is not being displayed?
- About using Double quotes in Vbscript (解释如何在 VBScript 中转义双引号)
虽然没有太多详细信息可以详细说明用 VBScript 编写的 Rest API 服务器端发生的情况,但有一篇文章解决了这个问题:Can I build a REST application using ASP Classic?。 post 的大部分描述了有关 JSON 字符串化以及从数据库获取数据的各种问题。我的问题不涉及这些。但是忽略这些(以及一些语法错误),post.
中几乎没有其他内容因此,我承认在服务器端行为方面我是一个新手。但是当我从上面提到的 post 中剥离所有内容时,我只剩下几行代码,这些代码似乎只是请求一个输入值,然后输出一个字符串。所以我想知道这是否真的是基本 I/O 所涉及的全部内容(即忽略安全和格式问题)。我决定试试这个。我的结果令人费解。当我调用这个非常简单的 API,而不是接收发送的非常简单的 JSON 字符串时,我取而代之的是从开头取回包含 API 的整个源代码HTML 标记结束。我显然犯了一个非常根本的错误。
这是我的代码。首先,这是极其简单的 REST API 本身(请注意:这只是回写一个人工的 JSON 字符串。它甚至不关心接收 POST 参数。)这是“simplerest.asp”
<html>
<head>
</head>
<body>
<%
Response.Write("{" & Chr(34) & "SomeCert" & Chr(34) & ":" & Chr(34) & "12345"& Chr(34) & "}")
%>
</body>
</html>
这里是调用此“API”(testrest.asp) 的代码(利用 jQuery):
<html>
<head>
<script type="text/javascript" src="/./include/jquery-3.4.1.min.js"></script>
</head>
<body>
<script type="text/javascript">
function getCert(certNumber)
{
var settings = {
"async": true,
"crossDomain": true,
"url": "example.com/simplerest.asp",
"method": "GET",
"success": function (response) {
alert("success");
},
"headers": {
"Accept": "application/json"
}
}
$.ajax(settings).done(function (response) {
certvals = response;
alert("certvals is " + certvals);
});
}
getCert("dummy");
</script>
</body>
</html>
如上所述,当我运行调用逻辑时,certvals
中返回的是整个“API”代码的精确ASCII表示。本着我正在尝试的精神,即以最基本的模式查看 API 运行ning,有人能告诉我我犯了什么愚蠢的错误吗?
<%
'Tell client you are sending JSON
Response.ContentType = "application/json"
Call Response.Write("{""SomeCert"":""12345""}")
%>
因为您将 JSON 封装在 HTML 结构中,它只是在 HTML 页面中作为字符串输出。
此外,当您可以通过加倍来转义字符串中的双引号时,就不需要 Chr(34)
。
关于
<html>
<head>
<title></title>
</head>
<body>
<button id="buttonSend">Send</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>
$("#buttonSend").on("click", function() {
getCert("dummy");
});
function getCert(certNumber)
{
var settings = {
"async": true,
"crossDomain": true,
"url": "example.com/simplerest.asp",
"method": "GET",
"success": function (response) {
alert("success");
}
}
$.ajax(settings).done(function (response) {
certvals = response;
alert("certvals is " + certvals.SomeCert);
});
}
</script>
</body>
</html>
输出(两条消息):
success
certval is 12345
有用的链接
- How to guide for getting a classic asp application working under IIS 7.0
- ASP Classic setup issues
- I have already enabled classic asp support on IIS for windows 7, and configured IIS web for classic asp,Yet .asp page is not being displayed?
- About using Double quotes in Vbscript (解释如何在 VBScript 中转义双引号)