首页 > 解决方案 > 如何从 ASP Classic 获得对 jQuery 请求的响应

问题描述

我已经构建了以下 jQuery,以便在单击按钮时从运行数据库查询 (MS SQL 2019) 的 ASP 经典页面获取响应。

我的目标是检查数据库中的某个字段是否发生了变化,如果 5 秒后没有再次询问,如果它发生变化并且值为 1,我们就成功了,应该向运行 jQuery 的页面返回一些额外的值,如果值为 0 时出现错误,我需要返回该信息,但在我在表中的字段中获得值之前,它应该暂停 5 秒并再次运行请求,直到我得到响应。

我已经尝试过使用本机 ASP Classic Response 和 JSON,但在这一点上,如果我在setInterval(function(){它返回后发出警报,但不是之后,function RequestValueFromTable()所以我猜最后一个函数有一些错误,但我似乎不能找出原因,因为我在控制台中没有错误。

所以我的问题是:

  1. 我在function RequestValueFromTable()下面和下面做错了什么?
  2. 从 ASP DB Query 将响应发送回 jQuery 的正确方法是什么?

我的 jQuery:

function RunTableEntryValidation()
{

   setInterval(function(){ 

   
    function RequestValueFromTable()
    {
    var url="check_usercreation_progress.asp?id=<%=objGetEmployeeName("ID")%>";
    $.get(url,{},verifyDb);
    }

    function verifyDb(response)
    {
        
        if (response==1)
        {
        clearInterval();
        alert("I have the value");
        //The value exists here I will run function
        }

        else if (response==0)
        {
        clearInterval();
        alert("I do not have the value");
        }
        
        else
        {
        };            

    };

}, 5000);

};

check_usercreation_progress.asp:

<%@ Language=VBScript %>
<%
option explicit
Response.Expires = -1
Server.ScriptTimeout = 600
Session.CodePage  = 65001
Response.CharSet = "UTF-8"

Dim CheckUserCreationStatus
Set CheckUserCreationStatus = Server.CreateObject("ADODB.Connection")
CheckUserCreationStatus.ConnectionString="Provider=SQLOLEDB; DATA SOURCE=<SERVER>;UID=SA;PWD=<PASSWORD>;DATABASE=<DATABASE>"
CheckUserCreationStatus.Open

Dim CheckUserCreationStatusSQL, CheckUserCreationStatusObj

CheckUserCreationStatusSQL = "SELECT * from EFP_EmploymentUser WHERE ID = " & Request.QueryString("id") & ";"

Set CheckUserCreationStatusObj = CheckUserCreationStatus.Execute(CheckUserCreationStatusSQL)


IF CheckUserCreationStatusObj("HasChachedAD") = 1 THEN 

Response.Write "1"

ELSEIF CheckUserCreationStatusObj("HasChachedAD") = 0 THEN 

Response.Write "0"

ELSE

END IF


CheckUserCreationStatus.Close
Set CheckUserCreationStatus = Nothing


%>

更新代码如下:

function RunTableEntryValidation()
{

setInterval(function(){ 

    console.log('setInterval was entered');


    function RequestValueFromTable()
    {
    var url="check_usercreation_progress.asp?id=<%=objGetEmployeeName("ID")%>";
    $.get(url,{},verifyDb);
    console.log('RequestValueFromTable was entered');
    }

    function verifyDb(response)
    {
        console.log('verifyDb was entered');
        
        if (response.result == 1)
        {
        console.log('Value 1 was returned');
        alert("I have the value");
        clearInterval();
        }

        else if (response.result == 0)
        {
        console.log('Value 0 was returned');
        alert("I do not have the value");
        clearInterval();
        }
        
        else
        console.log('No Value was returned');
        {
        };            

    };

}, 5000);

};
<%@ Language=VBScript %>
<%
option explicit
Response.Expires = -1
Server.ScriptTimeout = 600
Session.CodePage  = 65001
Response.CharSet = "UTF-8"

Dim CheckUserCreationStatus
Set CheckUserCreationStatus = Server.CreateObject("ADODB.Connection")
CheckUserCreationStatus.ConnectionString="Provider=SQLOLEDB; DATA SOURCE=<SERVER>;UID=SA;PWD=<PASSWORD>;DATABASE=<DATABASE>"
CheckUserCreationStatus.Open

Dim CheckUserCreationStatusSQL, CheckUserCreationStatusObj

CheckUserCreationStatusSQL = "SELECT * from EFP_EmploymentUser WHERE ID = " & Request.QueryString("ID") & ";"

Set CheckUserCreationStatusObj = CheckUserCreationStatus.Execute(CheckUserCreationStatusSQL)


IF CheckUserCreationStatusObj("ADCreationStatus") = 1 THEN 

Response.Write "{ ""result"": 1 }"

ELSEIF CheckUserCreationStatusObj("ADCreationStatus") = 0 THEN 

Response.Write "{ ""result"": 0 }"

ELSE

Response.Write "{ ""result"": ""empty"" }"

END IF


CheckUserCreationStatus.Close
Set CheckUserCreationStatus = Nothing


%>

标签: jqueryasp-classic

解决方案


该解决方案通过以下步骤进行了深入研究:

  1. ASP 页面中的 Response.Write 应该是 JSON 格式的响应: Response.Write "{ ""result"": 1 }"
  2. RequestValueFromTable()之后没有被调用 setInterval(function(){
  3. var thejson = JSON.parse(response)需要在之后定义, function verifyDb(response)并且 IF 句更改为if (thejson.result == 1)

工作代码:

function RunTableEntryValidation()
{
    
    setInterval(function(){ 

        console.log('setInterval was entered');

        RequestValueFromTable();

        function RequestValueFromTable()
        {
        var url="check_usercreation_progress.asp?id=<%=objGetEmployeeName("ID")%>";
        $.get(url,{},verifyDb);
        console.log('RequestValueFromTable was entered');
        }

        function verifyDb(response)
        {

            var thejson = JSON.parse(response)

            console.log('verifyDb was entered');
            console.log(response.result)
            
            if (thejson.result == 1)
            {
            clearInterval();
            console.log('Value 1 was returned');
            alert("I have the value");
            }

            else if (thejson.result == 0)
            {
            clearInterval();
            console.log('Value 0 was returned');
            alert("I do not have the value");
            }
            
            else
            console.log('No Value was returned');
            {
            };            

        };

    }, 5000);

};
<%@ Language=VBScript %>
<%
option explicit
Response.Expires = -1
Server.ScriptTimeout = 600
Session.CodePage  = 65001
Response.CharSet = "UTF-8"

Dim CheckUserCreationStatus
Set CheckUserCreationStatus = Server.CreateObject("ADODB.Connection")
CheckUserCreationStatus.ConnectionString="Provider=SQLOLEDB; DATA SOURCE=<SERVER>;UID=SA;PWD=<PASSWORD>;DATABASE=<DATABASE>"
CheckUserCreationStatus.Open

Dim CheckUserCreationStatusSQL, CheckUserCreationStatusObj

CheckUserCreationStatusSQL = "SELECT * from EFP_EmploymentUser WHERE ID = " & Request.QueryString("ID") & ";"

Set CheckUserCreationStatusObj = CheckUserCreationStatus.Execute(CheckUserCreationStatusSQL)


IF CheckUserCreationStatusObj("ADCreationStatus") = 1 THEN 

Response.Write "{ ""result"": 1 }"

ELSEIF CheckUserCreationStatusObj("ADCreationStatus") = 0 THEN 

Response.Write "{ ""result"": 0 }"

ELSE

Response.Write "{ ""result"": ""empty"" }"

END IF

CheckUserCreationStatus.Close
Set CheckUserCreationStatus = Nothing

%>


推荐阅读