AJAX和ASP
2015-11-12
作者:轩啸网络
使用javascript 的xmlhttpserver对象请求包含输出文本的脚本的一个ASP页面。
通用的跨浏览器js函数用来创建xmlhttpserver对象。这篇文章会讲到很多关于AJAX的基础知识。
function GetXmlHttpObject(handler) {
var objXmlHttp=null;
if (navigator.userAgent.indexOf("MSIE")>=0)
{
var strName="Msxml2.XMLHTTP";
if (navigator.appVersion.indexOf("MSIE 5.5")>=0)
{
strName="Microsoft.XMLHTTP";
}
try
{
objXmlHttp=new ActiveXObject(strName);
objXmlHttp.onreadystatechange=handler;
return objXmlHttp;
}
catch(e)
{
alert("错误. ActiveX 脚本可能被禁止");
return;
}
}
if (navigator.userAgent.indexOf("Mozilla")>=0)
{
objXmlHttp=new XMLHttpRequest();
objXmlHttp.onload=handler;
objXmlHttp.onerror=handler;
return objXmlHttp;
}
}
实例js函数通过下拉菜单的默认值改变来触发。该函数获取到了CustomerID就会把它追加到将执行的asp参数。第一个js函数将调用第二个StateChanged函数,这将输出的任何返回的字符串(输出文本)到一个div的innerHTML。。
function GetCustomer(id)
{
var url="FetchCustomer.asp?CustomerID=" + id ;
xmlHttp=GetXmlHttpObject(stateChanged);
xmlHttp.open("GET", url , true);
xmlHttp.send(null);
}
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById('CustomerDetails').innerHTML=xmlHttp.responseText;
}
}
下拉列表的onChange事件触发了GetCustomer函数
<%
strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;"
strDb = "Data Source=" & Server.MapPath("Northwind.mdb")
strConn = strProvider & strDb
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strConn
Set rs = Conn.Execute("SELECT [CustomerID], [CompanyName] FROM [Customers]")
If Not rs.EOF Then
%>
<form>
<select name="CustomerID" onChange="GetCustomer(this.value);">
<option></option>
<%
Do Until rs.EOF
Response.Write "<option value=""" & rs("CustomerID") & """>"
Response.Write rs("CompanyName") & "</option>" & VbCrLf
rs.MoveNext
Loop
rs.Close : Set rs = Nothing : Conn.Close : Set Conn = Nothing
%>
</select>
</form>
<%
Else
rs.Close : Set rs = Nothing : Conn.Close : Set Conn = Nothing
Response.Write "<p>好像有错误哦</p>"
End If
%>
<div id="CustomerDetails"></div>
下面的例子讲了获取查询字符串和查询数据库,把结果输出到http Response,然后获取了xmlhttp对象和readystate属性变化触发statechanged方法,打印responseText到div。
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;"
strDb = "Data Source=" & Server.MapPath("Northwind.mdb")
strConn = strProvider & strDb
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strConn
query = "SELECT * FROM Customers WHERE CustomerID = ?"
CustomerID = Request.QueryString("CustomerID")
arParams = array(CustomerID)
set cmd = Server.CreateObject("ADODB.Command")
cmd.CommandText = query
set cmd.ActiveConnection = Conn
Set rs = cmd.Execute(,arParams,1)
If Not rs.EOF Then
Response.Write rs(1) & "<br />" & _
rs(4) & "<br />" & _
rs(5) & "<br />" & _
rs(6) & "<br />" & _
rs(7) & "<br />" & _
rs(8) & "<br />" & _
"Tel: " & rs(9) & "<br />"
End If
rs.Close : Set rs = Nothing
set cmd = Nothing
Conn.Close : Set Conn=nothing
%>
这个样本包括了使用数组传递参数命令的执行方法。这会有助于防御SQL的注入。