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的注入。