Javascript 使用AJAX XMLHttpRequest将表单输入值发送到服务器,使用所述值执行SQL查询并返回结果
我不熟悉使用AJAX和经典ASP,希望得到一些帮助/建议 我有两个输入框,一个用于开始日期,一个用于结束日期,还有一个按钮在我的网页上。当用户输入2个日期并单击按钮时,我希望在javascript中运行一个函数,该函数使用AJAX XMLHttpRequest获取运行ASP经典脚本输入的值,并连接到我的SQL数据库。在这里,输入框中输入的值需要在我的SQL查询中使用,以确定我想要获得结果的时间段,并将结果传递回javascript 我无法让程序正确运行,我不确定问题是我的javascript代码还是ASP代码..还是两者都有 变量返回空白 请参阅下文: HTML:Javascript 使用AJAX XMLHttpRequest将表单输入值发送到服务器,使用所述值执行SQL查询并返回结果,javascript,ajax,asp-classic,Javascript,Ajax,Asp Classic,我不熟悉使用AJAX和经典ASP,希望得到一些帮助/建议 我有两个输入框,一个用于开始日期,一个用于结束日期,还有一个按钮在我的网页上。当用户输入2个日期并单击按钮时,我希望在javascript中运行一个函数,该函数使用AJAX XMLHttpRequest获取运行ASP经典脚本输入的值,并连接到我的SQL数据库。在这里,输入框中输入的值需要在我的SQL查询中使用,以确定我想要获得结果的时间段,并将结果传递回javascript 我无法让程序正确运行,我不确定问题是我的javascript代码
<div id="form_container">
<input type="text" id="sDate" name="sDate" />
<input type="text" id="eDate" name="eDate" />
<br>
<button type="button" id="btnDates" onclick="sendData()">Update</button>
<div id="results">Results here...</div>
</div>
var xmlhttp;
function sendData(sDate, eDate) {
xmlhttp = GetXmlHttpObject();
if (xmlhttp == null) {
alert ("Your browser does not support AJAX!");
return;
}
var url = "getDates.asp?sDate="+sDate+"&eDate="+eDate;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
xmlhttp.onreadystatechange=stateChanged
function stateChanged() {
if (xmlhttp.readyState==4 || xmlhttp.readyState=="complete")
{
document.getElementById("results").innerHTML=xmlhttp.responseText
}}
}
<%
Dim strPwd, strUsr
Dim strDomain, strQuery
Dim objConn, objComm, objRs
Dim start_Date, end_Date
strDomain = "..."
strUsr = "..."
strPwd = "..."
start_Date = Request.QueryString("sDate")
end_Date = Request.QueryString("eDate")
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.open "..."
Set objComm = CreateObject("ADODB.Command")
Set objComm.ActiveConnection = objConn
strQuery = "SELECT [TICKET_ID] FROM [TICKET] WHERE
LAST_UPDATED between '"&sDate&"' and '"&eDate&"'
ORDER BY [TICKET_ID]DESC"
objComm.CommandText = strQuery
Set objRs = objComm.Execute
Do While Not objRs.EOF
For i = 0 To objRs.Fields.Count - 1 Step 1
results = objRs.Fields(i)
Next
objRs.MoveNext
Loop
Response.Write("Start date: "&start_Date)
Response.Write("End date: "&end_Date)
Response.Write("Results: "&results)
objRs.Close
Set objRs = nothing
Set objConn = nothing
Set objComm = nothing
%>
getDates.asp:
<div id="form_container">
<input type="text" id="sDate" name="sDate" />
<input type="text" id="eDate" name="eDate" />
<br>
<button type="button" id="btnDates" onclick="sendData()">Update</button>
<div id="results">Results here...</div>
</div>
var xmlhttp;
function sendData(sDate, eDate) {
xmlhttp = GetXmlHttpObject();
if (xmlhttp == null) {
alert ("Your browser does not support AJAX!");
return;
}
var url = "getDates.asp?sDate="+sDate+"&eDate="+eDate;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
xmlhttp.onreadystatechange=stateChanged
function stateChanged() {
if (xmlhttp.readyState==4 || xmlhttp.readyState=="complete")
{
document.getElementById("results").innerHTML=xmlhttp.responseText
}}
}
<%
Dim strPwd, strUsr
Dim strDomain, strQuery
Dim objConn, objComm, objRs
Dim start_Date, end_Date
strDomain = "..."
strUsr = "..."
strPwd = "..."
start_Date = Request.QueryString("sDate")
end_Date = Request.QueryString("eDate")
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.open "..."
Set objComm = CreateObject("ADODB.Command")
Set objComm.ActiveConnection = objConn
strQuery = "SELECT [TICKET_ID] FROM [TICKET] WHERE
LAST_UPDATED between '"&sDate&"' and '"&eDate&"'
ORDER BY [TICKET_ID]DESC"
objComm.CommandText = strQuery
Set objRs = objComm.Execute
Do While Not objRs.EOF
For i = 0 To objRs.Fields.Count - 1 Step 1
results = objRs.Fields(i)
Next
objRs.MoveNext
Loop
Response.Write("Start date: "&start_Date)
Response.Write("End date: "&end_Date)
Response.Write("Results: "&results)
objRs.Close
Set objRs = nothing
Set objConn = nothing
Set objComm = nothing
%>
首先,尝试使用响应只返回一个数据。写入并检查返回的值是否正确这是因为sdate
和edate
参数从未填充。将SendData()
函数绑定到onclick
事件,但不传递值sdate
和edate
。有多种方法可以处理此问题,但我不会将sdate
和edate
传递到SendData()
函数中,只使用document.getElementById(“sdate”).value代码>到文本框值。从[TICKET]中选择[TICKET\u ID],其中上次在“&sDate&”和“&eDate&”ORDER BY[TICKET\u ID]DESC之间更新的[TICKET\u ID]
易受SQL注入攻击。改用查询。也可以通过使用提高性能。此行results=objRs.Fields(i)
将在每次循环迭代时更新结果变量。如果您希望附加到结果变量,我建议您创建一个数组,然后使用VBScript Join函数将字符串组合在一起。