经典ASP Request.form在使用javascript提交时没有更新

问题描述:

我有一个简单的表单,我使用Javascript在数据库上执行搜索。经典ASP Request.form在使用javascript提交时没有更新

<form id="searchForm" onsubmit="return searchTree(this);" method="post" class="form-poshytip"> 
<input type="text" name="searchbox" placeholder="zoek hier je product..." id="searchField" /> 
<input type="image" value="Zoeken" name="submit" src="../img/Zoeken.PNG" alt="submit" /> 
</form> 

在Javascript中,我使用经典ASP连接到Access。

<script language="JavaScript"> 
function searchTree(form) { 
<% Dim rsTreeview2 %> 
<% Set adoCon = Server.CreateObject("ADODB.Connection") %> 
<% adoCon.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("...") %> 
<% Set rsTreeview2 = Server.CreateObject("ADODB.Recordset") %> 
<% strSQL = "SELECT tblTreeview_nl.volgnr, tblTreeview_nl.lid_van, tblTreeview_nl.omschrijving, tblTreeview_nl.doctype, tblTreeview_nl.docnaam FROM tblTreeview_nl WHERE tblTreeview_nl.omschrijving LIKE '%" & request.form("searchbox") & "%'"%> 
<% rsTreeview2.Open strSQL, adoCon %> 
... 
<% rsTreeview2.Close %> 
<% Set rsTreeview2 = Nothing %> 
<% Set adoCon = Nothing %> 
return false; 
}; 
</script> 

我第一次点击按钮,我使用的Request.Form(“搜索框”)得到的文本框中正确的值,但如果我再次点击改变文本框后的request.form按钮(“搜索框“)包含旧值。我如何从文本框中获取当前值?

唷,从哪里开始?

  • 第一;从这篇文章中删除您的数据库名称,因为我可以找到 它并下载它。
  • 秒;越过您的搜索字词,以防止SQL注入

问题是您使用​​。这意味着如果函数返回FALSE,则表单不会被提交。 在您的脚本中,我看到函数总是返回false,所以表单不会真正提交。

我不知道为什么你已经把所有的ASP/VBScript代码放在你的JavaScript标签中,但我认为你直接输出一些JavaScript代码到你的脚本标签来创建树视图。这很好,但出于测试的目的,我会先将它输出到屏幕上,而不是内部脚本标签,然后从中进行工作。

我已经重新格式化了您的代码来做到这一点。这里还有一个快速修复SQL注入问题的方法。

希望这有助于

埃里克

<% 

function hasValue(value) 
    hasValue = NOT(isNull(value) OR value="") 
end function 

function escape(inputValue) 
    if hasValue(inputValue) then 
     escape = Replace(inputValue, "'", "''") 
    end if 
end function 

function recordsetToString(rs) 
    Dim objField 
    recordsetToString = "" 
    recordsetToString = recordsetToString & "<table class=""dbgtable"">" 
    recordsetToString = recordsetToString & "<tr>" & vbNewLine 
    For Each objField in rs.Fields 
    recordsetToString = recordsetToString & "<th>" & objField.Name & "</th>" & vbNewLine 
    Next 
    recordsetToString = recordsetToString & "</tr>" & vbNewLine 
    if NOT rs.EOF then 
     Do While Not rs.EOF 
      recordsetToString = recordsetToString & "<tr>" & vbNewLine 
      For Each objField in rs.Fields 
       recordsetToString = recordsetToString & "<td>" 
       if isNull(objField.Value) then 
        recordsetToString = recordsetToString & "<i>NULL</i>" 
       else 
        if vartype(objField.Value)>20 then 
         recordsetToString = recordsetToString & typename(objField.Value) 
        else 
         recordsetToString = recordsetToString & objField.Value 
        end if 
       end if 
       recordsetToString = recordsetToString & "</td>" & vbNewLine 
      Next 
      recordsetToString = recordsetToString & "</tr>" & vbNewLine 
     rs.MoveNext 
     Loop 
     if rs.CursorType>0 then 
      rs.movefirst 
     end if 
    end if 
    recordsetToString = recordsetToString & "</table>" & vbNewLine 
end function 

if hasValue(request.form("searchbox")) Then 
Dim adoCon 
Set adoCon = Server.CreateObject("ADODB.Connection") 
    adoCon.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("[PATH_TO_DATBASE]") 
    Dim rsTreeview2 
    Set rsTreeview2 = Server.CreateObject("ADODB.Recordset") 
     strSQL = "SELECT tblTreeview_nl.volgnr, tblTreeview_nl.lid_van, tblTreeview_nl.omschrijving, tblTreeview_nl.doctype, tblTreeview_nl.docnaam FROM tblTreeview_nl WHERE tblTreeview_nl.omschrijving LIKE '%" & escape(request.form("searchbox")) & "%'" 
     rsTreeview2.Open strSQL, adoCon 
      recordsetToString(rsTreeview2) 
     rsTreeview2.Close 
    Set rsTreeview2 = Nothing 
Set adoCon = Nothing 
end if 
%> 


<script language="JavaScript"> 
function searchTree(form) { 
    return false; 
}; 
</script> 
+0

上面的代码应该工作,只是不从您的javascript函数返回false。返回True以使表单提交。 – 2013-03-08 09:40:19

+0

感谢您的回复,我已经实现了转义功能。 但是,我不清楚你的解决方案将如何总是从文本框中获取当前值。何时会执行代码“if hasValue(request.form(”searchbox“))”?我们不必把它放在searchTree函数中吗? – 2013-03-08 09:40:29

+0

问题是,返回true后,页面将被重新加载,并且我刚写入的treeview将会消失。我怎样才能防止呢? – 2013-03-08 09:42:17