使用Classic ASP搭建服务端REST API时返回完整源码而非JSON的问题
问题原因和修复方案
1. 核心问题:ASP未被IIS正确解析
返回完整源代码的本质是你的web服务器(IIS)没有将.asp文件交给ASP经典引擎处理,而是当成普通静态文本文件直接返回了,需要先检查IIS配置:
- 确认IIS已经安装「ASP」模块:Windows功能中依次找到「万维网服务>应用程序开发功能>ASP」,勾选启用
- 确认站点对应应用程序池的「托管管道模式」设置为「经典」,64位系统需要同时开启「启用32位应用程序」选项
- 确认.asp文件所在目录的处理程序映射中,存在
.asp后缀的映射规则,指向系统的asp.dll
2. 接口代码优化(simplerest.asp)
你当前代码里多余的HTML标签会污染JSON输出,且没有正确设置响应头,修改后的最简可用代码如下:
<% ' 清除默认输出缓冲 Response.Clear ' 设置响应内容类型为JSON Response.ContentType = "application/json" ' 设置字符编码避免乱码 Response.Charset = "UTF-8" ' 输出JSON内容,VBScript里连续两个双引号代表转义后的双引号,无需用Chr(34)拼接 Response.Write "{""SomeCert"":""12345""}" ' 结束响应避免输出多余内容 Response.End %>
如果需要支持跨域调用,可以额外添加一行CORS响应头配置,生产环境建议将*替换为实际允许访问的域名:
Response.AddHeader "Access-Control-Allow-Origin", "*"
3. 前端调用代码修正
你当前的请求URL缺少协议头(http/https),同域调用建议直接用相对路径,跨域调用要补全协议头,修改参考:
function getCert(certNumber) { var settings = { "async": true, "crossDomain": true, // 同域直接写相对路径,跨域要写全如"https://你的域名/simplerest.asp" "url": "/simplerest.asp", "method": "GET", "headers": { "Accept": "application/json" } } $.ajax(settings).done(function (response) { // 服务端设置了正确的Content-Type后,jQuery会自动将响应解析为JSON对象 alert("certvals.SomeCert is " + response.SomeCert); }); } getCert("dummy");
内容的提问来源于stack exchange,提问作者roricka
相关产品推荐
相关产品推荐

