尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

ASP+AJAX+JSON医生预约系统源码实战:Win11 IIS配置与接口开发

发布时间:2026/9/26 4:30:42

资讯中心
01
ARTICLE

ASP+AJAX+JSON医生预约系统源码实战:Win11 IIS配置与接口开发

ASP+AJAX+JSON医生预约系统源码实战:Win11 IIS配置与接口开发
简介这份资源是一套基于ASP、Ajax与JSON技术栈实现的医生预约系统源码及配套数据库面向刚接触Web开发的新手以及希望巩固前后端交互的进阶开发者可用于课程设计、毕业设计参考或Ajax异步请求的实战练习。压缩包共37个文件约321KB包含9个asp页面文件、5个js脚本、3个css样式表以及mdb与db两种数据库文件和若干png、gif界面素材覆盖预约、科室查询、日期选择等核心模块。其中Ajax与JSON的配合贯穿预约提交、科室数据获取等环节jQuery与jQuery UI负责日期控件与页面交互md5.asp、conn.asp等文件则展示了登录校验与数据库连接的基础写法。目前已有272人学习浏览。整体目录结构清晰代码量适中读者可借此理解ASP环境下前后端数据交换的完整流程并对照数据库表结构快速搭建本地运行环境适合作为入门练手与二次开发的基础模板。1. 从一份 ASPAJAXJSON 医生预约系统源码说起它到底能跑通什么如果你手上正拿着一份「aspajaxjson医生预约系统源码和数据库」大概率不是想研究 ASP 这门老技术本身而是想快速把一套能用的预约挂号流程跑起来患者选科室、选医生、选时段提交后写进数据库后台能看排班和预约记录。这套组合的典型形态是经典 ASPVBScript负责服务端逻辑和数据库读写前端用 AJAX 异步提交数据格式走 JSON避免整页刷新。它解决的核心问题是「不刷新页面完成一次预约交互」适合中小诊所、校医院、社区门诊这类并发不高、预算有限、维护人手少的场景。很多人搜「win11配置iis asp」就是想在本机先把这套东西跑起来验证这篇就按这个思路从环境、数据库、接口到排错把能复现的路径讲清楚。2. 环境与数据库让 ASP 在 Win11 的 IIS 上先活过来2.1 为什么是经典 ASP 而不是 ASP.NET标题里写的是 asp不是 aspx这两者在部署上差别很大。经典 ASP 靠asp.dll解析.asp文件IIS 里对应的是「ASP」这个功能模块而asp javascript aspx.cs这类搜索词指向的是 ASP.NET 体系走的是.NET CLR和编译型页面配置项完全不同。你拿到源码后第一件事是看文件后缀如果是.asp就按经典 ASP 配如果是.aspx那需要装 .NET Framework 并注册对应版本。经典 ASP 的好处是改完即生效、不需要编译坏处是语法老、调试信息弱出错时经常只给一个 500 而没有堆栈。选它的理由通常只有一个源码就是 ASP 写的重写成本高于维护成本。数据库这块经典 ASP 最顺的是 Access.mdb/.accdb或 SQL Server。热词里有人问「asp 能否搭配 mysql」答案是能但要用 MySQL ODBC 驱动连接字符串和 Access 不一样而且 64 位 IIS 下必须装 64 位 ODBC 驱动否则报「未找到提供程序」。我一般建议本地验证先用 Access零配置要上生产再换 SQL Server 或 MySQL把连接字符串抽到一个conn.asp里统一改。2.2 Win11 上启用 IIS 与 ASP 的完整步骤Win11 家庭版没有 IIS 的完整入口专业版/企业版可以直接开。按下面走# 以管理员身份打开 PowerShell启用 IIS 及经典 ASP 相关功能 Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-ASP -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-ISAPIExtensions -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-ISAPIFilter -All这几条命令分别启用 Web 服务器角色、经典 ASP 模块、ISAPI 扩展和筛选器。装完后在「Windows 功能」里能看到「Internet Information Services」→「万维网服务」→「应用程序开发功能」→「ASP」被勾选。注意IIS-ASP不勾.asp文件会被当成静态文件直接下载浏览器里看到的是源码这是新手最常见的翻车点。装完 IIS 后把源码目录放到C:\inetpub\wwwroot\doctor下在 IIS 管理器里右键「网站」→「添加网站」物理路径指过去端口给 8080 避免和系统占用冲突。然后进「应用程序池」把该站点对应的池改为「无托管代码」——经典 ASP 不需要 CLR设成集成模式有时反而会因为 ASP.NET 模块干扰导致 404。2.3 数据库连接与 32/64 位驱动的坑Access 数据库在 64 位系统上要用Microsoft.ACE.OLEDB.12.0连接字符串长这样% conn.asp —— 统一数据库连接改这一处即可 Dim conn, connStr connStr ProviderMicrosoft.ACE.OLEDB.12.0;Data Source Server.MapPath(/doctor/data/appointment.mdb) ; Set conn Server.CreateObject(ADODB.Connection) conn.Open connStr %Server.MapPath把虚拟路径转成物理路径避免相对路径在不同层级页面下解析错乱。如果报「未找到提供程序。该程序可能未正确安装」八成是没装 Access Database Engine或者装的是 32 位而 IIS 跑在 64 位。解决办法是在应用程序池的高级设置里把「启用 32 位应用程序」设为 True或者装对应位数的引擎。这一步没有后悔药位数对不上就是连不上。提示本地调试时把 IIS 的「ASP」设置里「将错误发送到浏览器」设为 True否则 500 错误只显示一行通用提示排查全靠猜。3. AJAX 提交预约从表单到 JSON 接口的完整链路3.1 前端 AJAX 请求怎么写、参数怎么赋值预约页面的交互是用户选完科室、医生、日期、时段后点「确认预约」前端不刷新页面把数据 POST 给一个.asp接口接口返回 JSON前端根据结果弹提示或跳转。用原生XMLHttpRequest或fetch都行经典 ASP 项目里我倾向用fetch代码短。// booking.js —— 提交预约请求 function submitBooking(deptId, doctorId, date, slot) { // 组装参数注意字段名要和后端 Request.Form 取的一致 const payload { deptId: deptId, doctorId: doctorId, bookDate: date, timeSlot: slot, patientName: document.getElementById(pname).value, phone: document.getElementById(phone).value }; fetch(api/book.asp, { method: POST, headers: { Content-Type: application/json;charsetutf-8 }, body: JSON.stringify(payload) }) .then(res res.json()) .then(data { if (data.code 0) { alert(预约成功编号 data.orderNo); } else { alert(预约失败 data.msg); } }) .catch(err console.error(请求异常, err)); }Content-Type设成application/json是关键热词里「ajax请求设置编码格式」问的就是这个。如果后端按表单方式取参Request.Form(deptId)那前端就不能发 JSON body得用URLSearchParams或FormData。两种方式不能混发了 JSON 却用Request.Form取后端拿到的全是空值这是「给ajax请求参数赋值」类问题里最高频的翻车。3.2 后端 ASP 如何解析 JSON 并写库经典 ASP 原生没有 JSON 解析器常见做法是引一个纯 VBScript 的 JSON 解析类或者手动拼字符串。生产项目里我一般用现成的aspJSON类把请求体读出来解析成对象。下面是一个精简的接口骨架% api/book.asp —— 接收 JSON校验后写库返回 JSON Response.ContentType application/json Response.Charset utf-8 Dim raw, json, deptId, doctorId, bookDate, timeSlot, pname, phone 读取请求体 raw Request.BinaryRead(Request.TotalBytes) raw BytesToStr(raw) 需自行实现字节转字符串处理 UTF-8 Set json New aspJSON json.loadJSON(raw) deptId json.data(deptId) doctorId json.data(doctorId) bookDate json.data(bookDate) timeSlot json.data(timeSlot) pname json.data(patientName) phone json.data(phone) 简单校验 If Len(phone) 7 Or Len(pname) 0 Then Response.Write {code:1,msg:姓名或电话不合法} Response.End End If 写库 Dim rs, orderNo orderNo BK Year(Now) Month(Now) Day(Now) Right(0000 Int(Rnd()*9999), 4) Set rs Server.CreateObject(ADODB.Recordset) rs.Open appointments, conn, 1, 3 rs.AddNew rs(order_no) orderNo rs(dept_id) deptId rs(doctor_id) doctorId rs(book_date) bookDate rs(time_slot) timeSlot rs(patient) pname rs(phone) phone rs(status) 0 rs.Update rs.Close Response.Write {code:0,msg:ok,orderNo: orderNo } %BytesToStr要按 UTF-8 解码否则中文姓名会变乱码。rs.Open的第三个参数 1 是 adOpenKeyset第四个 3 是 adLockOptimistic允许并发写入时加锁。返回的 JSON 是手工拼的字段少时够用字段一多建议统一走一个ToJson函数避免漏引号导致json parse error。3.3 时段冲突校验预约系统真正的核心逻辑光写进去不算完同一个医生同一时段不能被约两次。校验要放在写库之前而且要考虑并发 冲突检查同一医生、同一日期、同一时段是否已有有效预约 Dim checkSql, checkRs checkSql SELECT COUNT(*) AS c FROM appointments WHERE doctor_id doctorId _ AND book_date# bookDate # AND time_slot timeSlot _ AND status0 Set checkRs conn.Execute(checkSql) If checkRs(c) 0 Then Response.Write {code:2,msg:该时段已被预约} Response.End End If checkRs.CloseAccess 的日期字面量用#包裹SQL Server 用单引号换库时这里要改。并发场景下「查了再写」仍有窗口量小的诊所可以接受要严格就加唯一索引让数据库在插入时直接拒绝重复。status0表示有效预约取消后置 1这样历史记录还在但不再占用时段。4. 排班与查询接口JSON 数组怎么组织才不乱4.1 医生列表与可约时段的 JSON 结构前端要渲染医生卡片和时段按钮后端返回的 JSON 数组结构要稳定。我一般约定成{code, msg, data}三层data里放数组% api/doctors.asp —— 按科室返回医生及可约时段 Dim deptId, rs, item, out deptId Request.QueryString(deptId) Set rs conn.Execute(SELECT id,name,title FROM doctors WHERE dept_id deptId AND active1) out {code:0,data:[ Do While Not rs.EOF out out {id: rs(id) ,name: rs(name) ,title: rs(title) }, rs.MoveNext Loop rs.Close If Right(out,1) , Then out Left(out, Len(out)-1) out out ]} Response.Write out %拼接数组时最后一个逗号要处理掉否则前端JSON.parse直接报错。热词里「json数组」「json转字符串」的痛点基本都在这里手工拼 JSON 容易漏转义医生姓名里带引号就崩。稳妥做法是写一个EscapeJson函数把、\、换行替换掉再拼。4.2 前端渲染与 JSON 解析的容错前端拿到数组后遍历生成 DOM解析失败要有兜底fetch(api/doctors.asp?deptId deptId) .then(res res.text()) // 先取文本避免直接 .json() 抛异常 .then(text { let data; try { data JSON.parse(text); } catch (e) { console.error(JSON 解析失败原始返回, text); return; } if (data.code ! 0) return; renderDoctors(data.data); });先res.text()再手动JSON.parse好处是解析失败时能把原始字符串打出来一眼看出是多了逗号还是混进了 HTML 错误页。直接res.json()失败时只给一个笼统异常排查成本高。这个习惯在经典 ASP 项目里尤其值钱因为后端拼串出错太常见。4.3 分页与查询参数的处理预约记录列表要分页参数走 query string后端算 offsetDim page, pageSize, offset page CLng(Request.QueryString(page)) If page 1 Then page 1 pageSize 20 offset (page - 1) * pageSize SQL Server 用 OFFSET/FETCHAccess 用 TOP 子查询 Dim sql sql SELECT TOP pageSize * FROM appointments WHERE id NOT IN _ (SELECT TOP offset id FROM appointments ORDER BY id DESC) ORDER BY id DESCAccess 不支持OFFSET只能用NOT IN子查询模拟数据量大时性能差这也是为什么记录一多就该换 SQL Server。参数一定要CLng转换防止pageabc导致类型错误也顺带挡掉注入。5. 避坑与排查这套老组合最容易翻车的地方5.1 中文乱码从请求到响应要统一 UTF-8现象预约人姓名写进库变成问号或乱码。原因通常是三处编码不一致——页面% CodePage65001 %、请求体解码、数据库字段排序规则。解决ASP 文件头加% LanguageVBScript CodePage65001%Response.Charsetutf-8BytesToStr按 UTF-8 解码Access 字段用「中文简体」排序规则。三处缺一处就乱。5.2 500 错误没有堆栈现象接口返回 500浏览器只显示通用错误页。原因是 IIS 默认不把详细错误发给浏览器。解决IIS 里选中站点→「错误页」→「编辑功能设置」→选「详细错误」或在「ASP」→「调试属性」里把「将错误发送到浏览器」设为 True。改完立刻能看到行号和错误描述。5.3 AJAX 跨域与同源现象前端页面和接口不在同一端口请求被浏览器拦截。原因是同源策略。解决把前端页面和.asp接口放同一个站点同一端口下别一个开 5500 一个开 8080。真要分离后端加Response.AddHeader Access-Control-Allow-Origin, *但经典 ASP 对预检请求处理麻烦能同源就同源。5.4 数据库连接池耗尽现象访问一段时间后所有页面卡死重启 IIS 恢复。原因是conn用完没Close连接数堆满。解决每个页面末尾conn.Close : Set conn Nothing或者把连接封装成函数用On Error Resume Next保证异常时也释放。经典 ASP 没有自动回收全靠手动。5.5 时段重复预约现象同一时段出现两条有效记录。原因是「查了再写」之间有并发窗口。解决给doctor_id book_date time_slot status建唯一索引插入冲突时捕获错误返回「已被预约」。这是最可靠的一道防线。6. 进阶把预约接口做成可复用的小型 API 层跑通之后别让每个页面各写各的 SQL。我一般抽一个api/_base.asp统一处理 JSON 输出、错误捕获和连接释放% api/_base.asp —— 所有接口的公共底座 Response.ContentType application/json Response.Charset utf-8 On Error Resume Next Sub OutJson(code, msg, data) Dim s s {code: code ,msg: msg If IsObject(data) Or IsArray(data) Then s s ,data: data End If Response.Write s } Response.End End Sub Sub Fail(msg) OutJson(1, msg, Null) End Sub %每个接口文件头部!--#include file_base.asp--业务里只管取参、查库、调OutJson。这样错误格式统一前端解析逻辑只写一份。验证方法是写一个api/ping.asp返回{code:0,msg:ok}先用浏览器直接访问确认 JSON 格式正确再从前端调能把「是接口问题还是前端问题」快速切开。时段生成这块有个具体技巧不要预先在数据库里铺满所有时段而是按医生排班规则动态算。比如医生上午 8:00–12:00、每 30 分钟一个号就用循环生成候选时段再查已约的排除掉。这样排班改了不用改数据只改规则参数。我踩过的坑是早期把时段写死成记录医生临时停诊要删一堆行后来改成规则驱动维护量直接降下来。做这类系统数据表设计比代码更值得花时间表结构对了后面加功能都是顺的。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。