You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JQuery Ajax在ASP Classic服务器端执行预订逻辑?

问题描述

我正在开发一个无需数据库、仅支持单用户的ASP Classic简易登录页面,用于实现车辆的预订与取消功能,使用Application对象存储可预订及已预订车辆的数量。

我希望通过表格行上的按钮触发JQuery Ajax请求,修改对应车辆的预订状态,但找不到类似控制器方法的方式来处理$.post请求以执行指定逻辑。

当前使用如下$.post请求时,返回的是整个index.asp页面内容:

$.post("index.asp", function(data, status){
        console.log(data);
        console.log(status);
    });

我的ASP代码

<%@ language="javascript" %>
<html>
    <head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <meta charset="utf-8">
    </head>
    <body>
        <table align=center>
            <tr>
                <td align=center>
                    <b> LOGIN </b>
                    <br>
                    <br>
                    <br>
                    <form method=post action="index.asp" >
                        UserName <input type=text name=uname /> <br>
                        Password <input type=password name=password /> <br><br>
                        <p align=right> <input type=submit value=login name=submit /> </p>
                    </form>
                </td>
            </tr>
        </table>
    </body>
</html>

<script>
function xtt(keyName){
    $.post("index.asp", function(data, status){
        console.log(data);
        console.log(status);
    });
}
</script>

<%
if (typeof Application("a") === "undefined") {
Application("a") = 1;
}else{
    Application("a") = Application("a") +1;
}

Response.Write (Application("a"));

function GetCarName(sName)
{
    if((sName = "MAZDA_FOR_BOOK") || (sName = "MAZDA_FOR_USER"))
    {
        GetCarName = "מאזדה";
    }
    else if((sName = "KIA_FOR_BOOK") || (sName = "KIA_FOR_USER"))
    {
        GetCarName = "קיה";
    }
    else if((sName = "SHEV_FOR_BOOK") || (sName = "SHEV_FOR_USER"))
    {
        GetCarName = "שברולט";
    }
    else {
     GetCarName = "דייהטסו";
    }
}

function WriteCarsTable(CarList, valueForSubmit, TestForSubmit){
    %>
            <table border='1'>
                <tr>
                    <td style='text-align: center;'> כמה רכבים </td>
                    <td style='text-align: center;'> סוג רכב </td>
                    <td style='text-align: center;'> <%TestForSubmit%></td>
                </tr>
            <%for(var i = 0; i < CarList.length; i++) {
                var key = CarList[i];%>
                <tr>
                    <td style='text-align: center;'><%=Application(key)%></td>
                    <td style='text-align: center;'><%=key%></td> 
                    <td style='text-align: center;'>
                           <input name=<%=key%> type=submit value=<%=valueForSubmit%> onClick=xtt('<%=key%>')></input>
                    </td>
                <tr>
            <%}%>
            </table>
    <%
 }
%>
    <label><%=submit%></label>
<%
    var CARS_SET_FOR_BOOK = [];
    CARS_SET_FOR_BOOK.length = 4;
    CARS_SET_FOR_BOOK[1] = "MAZDA_FOR_BOOK";
    CARS_SET_FOR_BOOK[2] = "KIA_FOR_BOOK";
    CARS_SET_FOR_BOOK[3] = "SHEV_FOR_BOOK";
    CARS_SET_FOR_BOOK[4] = "DAIH_FOR_BOOK";

    var CARS_SET_FOR_USER = [];
    CARS_SET_FOR_USER.length = 4;
    CARS_SET_FOR_USER[1] = "MAZDA_FOR_USER";
    CARS_SET_FOR_USER[2] = "KIA_FOR_USER";
    CARS_SET_FOR_USER[3] = "SHEV_FOR_USER";
    CARS_SET_FOR_USER[4] = "DAIH_FOR_USER";

   if (typeof Application("init") === "undefined") 
   {
        Application(CARS_SET_FOR_BOOK[1]) = 1;
        Application(CARS_SET_FOR_BOOK[2]) = 2;
        Application(CARS_SET_FOR_BOOK[3]) = 3;
        Application(CARS_SET_FOR_BOOK[4]) = 4;

        Application(CARS_SET_FOR_USER[1]) = 0;
        Application(CARS_SET_FOR_USER[2]) = 0;
        Application(CARS_SET_FOR_USER[3]) = 0;
        Application(CARS_SET_FOR_USER[4]) = 0;
        Application("init") = true;
   }

    Response.Write (Request.Form);
    var res= Request.Form("uname")
    
    WriteCarsTable(CARS_SET_FOR_BOOK,"הזמן רכב","רכבים להזמנה")
    WriteCarsTable(CARS_SET_FOR_USER,"החזר רכב","רכבים שהוזמנו")

    var submit = Request.Form("submit")
    name = Request.Form("name")
    Response.Write (name)
%>
解决方案

1. 给Ajax请求添加标识参数

在$.post请求中额外传递参数,告诉ASP页面这是Ajax请求,需执行特定逻辑而非返回整个页面:

function xtt(keyName){
    $.post("index.asp", {action: "update_car_status", carKey: keyName}, function(data, status){
        console.log(data);
        console.log(status);
        // 根据返回结果更新页面车辆数量,比如修改对应行的数值
        if(data.success){
            // 找到对应行更新数量
            var row = document.querySelector(`input[name='${keyName}']`).closest('tr');
            row.querySelector('td:first-child').textContent = 
                keyName.includes('_FOR_BOOK') ? data.bookCount : data.userCount;
        }else{
            alert(data.message);
        }
    }, "json"); // 指定接收JSON格式数据
}

2. 在ASP页面开头处理Ajax请求

在ASP代码最开始位置,检查请求参数,处理Ajax逻辑后输出结果并终止页面执行:

<%@ language="javascript" %>
<%
// 优先处理Ajax请求
var action = Request.Form("action");
if(action === "update_car_status"){
    var carKey = Request.Form("carKey");
    var result = {success: false, message: ""};

    // 判断是预订还是取消操作
    if(carKey.indexOf("_FOR_BOOK") !== -1){
        // 预订车辆:减少可预订数,增加已预订数
        var userKey = carKey.replace("_FOR_BOOK", "_FOR_USER");
        if(Application(carKey) > 0){
            Application.Lock(); // 加锁避免并发问题
            Application(carKey) -= 1;
            Application(userKey) += 1;
            Application.UnLock();
            result.success = true;
            result.bookCount = Application(carKey);
            result.userCount = Application(userKey);
        }else{
            result.message = "该车辆已无剩余可预订数量";
        }
    }else if(carKey.indexOf("_FOR_USER") !== -1){
        // 取消预订:减少已预订数,增加可预订数
        var bookKey = carKey.replace("_FOR_USER", "_FOR_BOOK");
        if(Application(carKey) > 0){
            Application.Lock();
            Application(carKey) -= 1;
            Application(bookKey) += 1;
            Application.UnLock();
            result.success = true;
            result.bookCount = Application(bookKey);
            result.userCount = Application(carKey);
        }else{
            result.message = "你没有预订该车辆";
        }
    }else{
        result.message = "无效的车辆标识";
    }

    // 设置返回类型为JSON
    Response.ContentType = "application/json";
    // 输出JSON结果
    Response.Write(JSON.stringify(result));
    // 终止页面后续执行,避免返回整个HTML
    Response.End();
}
%>
<!-- 原有的HTML和ASP代码从这里开始 -->

3. 修复现有代码的小问题

  • GetCarName函数中用了赋值运算符=,替换为相等判断===:
function GetCarName(sName)
{
    if((sName === "MAZDA_FOR_BOOK") || (sName === "MAZDA_FOR_USER"))
    {
        GetCarName = "מאזדה";
    }
    else if((sName === "KIA_FOR_BOOK") || (sName === "KIA_FOR_USER"))
    {
        GetCarName = "קיה";
    }
    else if((sName === "SHEV_FOR_BOOK") || (sName === "SHEV_FOR_USER"))
    {
        GetCarName = "שברולט";
    }
    else {
     GetCarName = "דייהטסו";
    }
}
  • 表格行闭合标签错误,将<tr>改为</tr>:
</tr>
  • 按钮类型改为button,避免触发表单提交:
<input name=<%=key%> type="button" value=<%=valueForSubmit%> onClick=xtt('<%=key%>')>

内容的提问来源于stack exchange,提问作者hedbisker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 04:12:03