ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# AJAX 数据库实例 **AJAX 可用来与数据库进行动态通信。** ## AJAX 数据库实例 下面的例子将演示网页如何通过 AJAX 从数据库读取信息: ``` <p>请在下面的下拉列表中选择一个客户:</p> <form action="" style="margin-top:15px;"> <label>请选择一位客户: <select name="customers" onchange="showCustomer(this.value)" style="font-family:Verdana, Arial, Helvetica, sans-serif;"> <option value="APPLE">Apple Computer, Inc.</option> <option value="BAIDU ">BAIDU, Inc</option> <option value="Canon">Canon USA, Inc.</option> <option value="Google">Google, Inc.</option> <option value="Nokia">Nokia Corporation</option> <option value="SONY">Sony Corporation of America</option> </select> </label> </form> <div id="txtHint" style="margin:15px 0 0 0;padding:0;border:0;color:#0479A7; font-weight:bold;">客户信息将在此处列出。</div> ``` ## 实例解释 - showCustomer() 函数 当用户在上面的下拉列表中选择某个客户时,会执行名为 "showCustomer()" 的函数。该函数由 "onchange" 事件触发: ``` function showCustomer(str) { var xmlhttp; if (str=="") { document.getElementById("txtHint").innerHTML=""; return; } if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("txtHint").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","getcustomer.asp?q="+str,true); xmlhttp.send(); } ``` showCustomer() 函数执行以下任务: * 检查是否已选择某个客户 * 创建 XMLHttpRequest 对象 * 当服务器响应就绪时执行所创建的函数 * 把请求发送到服务器上的文件 * 请注意我们向 URL 添加了一个参数 q (带有输入域中的内容) ## AJAX 服务器页面 由上面的 JavaScript 调用的服务器页面是 ASP 文件,名为 "getcustomer.asp"。 用 PHP 编写服务器文件也很容易,或者用其他服务器语言。请看[用 PHP 编写的相应的例子](/php/php_ajax_database.asp "PHP 和 AJAX MySQL 数据库实例")。 "getcustomer.asp" 中的源代码负责对数据库进行查询,然后用 HTML 表格返回结果: ``` <% response.expires=-1 sql="SELECT * FROM CUSTOMERS WHERE CUSTOMERID=" sql=sql & "'" & request.querystring("q") & "'" set conn=Server.CreateObject("ADODB.Connection") conn.Provider="Microsoft.Jet.OLEDB.4.0" conn.Open(Server.Mappath("/db/northwind.mdb")) set rs=Server.CreateObject("ADODB.recordset") rs.Open sql,conn response.write("<table>") do until rs.EOF for each x in rs.Fields response.write("<tr><td><b>" & x.name & "</b></td>") response.write("<td>" & x.value & "</td></tr>") next rs.MoveNext loop response.write("</table>") %> ```