codecamp

ajax和数据库操作

要清楚地说明了访问使用Ajax从一个数据库中的信息是多么容易,我们要建立动态的MySQL查询结果显示对“ajax.html”。但在我们继续之前,让做基础工作。使用以下命令创建一个表.

注: 我们建议你有足够的权限来执行下面的MySQL操作


CREATE TABLE `ajax_example` (
  `name` varchar(50) NOT NULL,
  `age` int(11) NOT NULL,
  `sex` varchar(1) NOT NULL,
  `wpm` int(11) NOT NULL,
  PRIMARY KEY  (`name`)


现在转储到这个表中使用下面的SQL语句的下列数据


INSERT INTO `ajax_example` VALUES ('Jerry', 120, 'm', 20);
INSERT INTO `ajax_example` VALUES ('Regis', 75, 'm', 44);
INSERT INTO `ajax_example` VALUES ('Frank', 45, 'm', 87);
INSERT INTO `ajax_example` VALUES ('Jill', 22, 'f', 72);
INSERT INTO `ajax_example` VALUES ('Tracy', 27, 'f', 0);
INSERT INTO `ajax_example` VALUES ('Julie', 35, 'f', 90);


客户端的HTML文件

现在,让我们有我们的客户端的HTML文件ajax.html,有下面的代码


<html>
<body>
<script language="javascript" type="text/javascript">
<!-- //Browser Support Code function ajaxFunction(){
 var ajaxRequest;  // The variable that makes Ajax possible!

 try{
   // Opera 8.0+, Firefox, Safari
   ajaxRequest = new XMLHttpRequest();
 }catch (e){
   // Internet Explorer Browsers
   try{
      ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
   }catch (e) {
      try{
         ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
      }catch (e){
         // Something went wrong
         alert("Your browser broke!");
         return false;
      }
   }
 }
 // Create a function that will receive data 
 // sent from the server and will update
 // div section in the same page.
 ajaxRequest.onreadystatechange = function(){
   if(ajaxRequest.readyState == 4){
      var ajaxDisplay = document.getElementById('ajaxDiv');
      ajaxDisplay.value = ajaxRequest.responseText;
   }
 }
 // Now get the value from user and pass it to
 // server script.
 var age = document.getElementById('age').value;
 var wpm = document.getElementById('wpm').value;
 var sex = document.getElementById('sex').value;
 var queryString = "?age=" + age ;
 queryString +=  "&wpm=" + wpm + "&sex=" + sex;
 ajaxRequest.open("GET", "ajax-example.php" + 
                              queryString, true);
 ajaxRequest.send(null); 
} //--> </script>
<form name='myForm'>
Max Age: <input type='text' id='age' /> <br />
Max WPM: <input type='text' id='wpm' />
<br />
Sex: <select id='sex'>
<option value="m">m</option>
<option value="f">f</option>
</select>
<input type='button' onclick='ajaxFunction()' 
                              value='Query MySQL'/>
</form>
<div id='ajaxDiv'>Your result will display here</div>
</body>
</html>


注: 在查询传递变量的方法是根据HTTP标准和表单

URL?variable1=value1;&variable2=value2;


服务器端PHP文件


所以,现在您的客户端脚本已准备就绪。现在我们来写我们的服务器端脚本,这会从数据库中提取年龄,WPM和性别将其发送回客户端。 “ajax-example.php”文件放入下面的代码


<?php
$dbhost = "localhost";
$dbuser = "dbusername";
$dbpass = "dbpassword";
$dbname = "dbname";
//Connect to MySQL Server
mysql_connect($dbhost, $dbuser, $dbpass);
//Select Database
mysql_select_db($dbname) or die(mysql_error());
// Retrieve data from Query String
$age = $_GET['age'];
$sex = $_GET['sex'];
$wpm = $_GET['wpm'];
// Escape User Input to help prevent SQL Injection
$age = mysql_real_escape_string($age);
$sex = mysql_real_escape_string($sex);
$wpm = mysql_real_escape_string($wpm);
//build query
$query = "SELECT * FROM ajax_example WHERE sex = '$sex'";
if(is_numeric($age))
$query .= " AND age <= $age";
if(is_numeric($wpm))
$query .= " AND wpm <= $wpm";
//Execute query
$qry_result = mysql_query($query) or die(mysql_error());


//Build Result String
$display_string = "<table>";
$display_string .= "<tr>";
$display_string .= "<th>Name</th>";
$display_string .= "<th>Age</th>";
$display_string .= "<th>Sex</th>";
$display_string .= "<th>WPM</th>";
$display_string .= "</tr>";


// Insert a new row in the table for each person returned
while($row = mysql_fetch_array($qry_result)){
$display_string .= "<tr>";
$display_string .= "<td>$row[name]</td>";
$display_string .= "<td>$row[age]</td>";
$display_string .= "<td>$row[sex]</td>";
$display_string .= "<td>$row[wpm]</td>";
$display_string .= "</tr>";

}
echo "Query: " . $query . "<br />";
$display_string .= "</table>";
echo $display_string;
?>


ajax实现与数据库的异步交互


AJAX重点在于用户体验,可以实现信息的异步传输,页面不会刷新。

下面介绍一下用Ajax实现与数据库的异步交互。Ajax中最核心的东西就是XMLHttpRequest对象。可以说没有XMLHttpRequest就没有Ajax。2000年以前的浏览器对XMLHttp的支持不够,只有IE中才支持,所以大多的Web程序员都没有关注它,但是2000年后XMLHttpRequest被各浏览器厂商用于自己的浏览器中,Mozilla和Safari把它采用为事实上的标准,主流浏览器都开始支持XMLHttpRequest对象。
 
(1)有关XMLHttpRequest对象的属性。
      

1、onreadystatechange属性。该属性存有处理服务器响应的函数。例如:


    xmlHttp.onreadystatechange=function()
    {
          //我们可以在这里写一些代码
     }
     

2、readystate属性。该属性存有服务器响应的状态信息,每当状态改变时,onreadystatechange就会被执行。readystate有5个可能的值,分别为0、1、2、3、4。具体可参考:


//www.w3cschool.cn/ajax/r2cu1jlr.html


3、responseText属性。可以通过这个来获取服务器返回的数据。
 
(2)在javascript脚本中声明和使用XMLHttpRequest对象。

不同的浏览器声明XMLHttpRequest的声明是不一样的。
Firefox, Opera 8.0+, Safari是:new XMLHttpRequest();
IE是:new ActiveXObject("Microsoft.XMLHTTP");
 
    

(3)XMLHttpRequest的方法。
      

1、abort()方法。用来暂停与一个XMLHttpRequest对象相联系的HTTP请求。从而把该对象复位到未初始状态。
      

2、open()。可以初始化一个XMLHTTpRequest对象。
       

格式:open(string method,string url,Boolean asynch,string username,string password);
       

参数:
       method——必选参数,用于指明请求的HTTP方法(GET,POST,PUT,DELETE或HEAD)。
       url——必选参数,表示请求目标的url地址。
       asynch——可选参数,表示采用同步还是异步方式,默认为true。
       username和password——可选参数,当连接的服务器需要验证时用。
      

3、send()。该方法用来向服务器发送具体的请求。
      

格式:send(content)    content:可选参数,发送的内容。

PS:一般发送数据不要在send方法里传数据,可以直接在open方法里的url中附上要传递的参数,这样方便些。
 
(4)服务器端执行脚本语言。(这里我用的是.aspx文件,所用语言为C#,也可以是其他的脚本文件,如:asp,jsp,php等)
       XMLHttpRequest对象通过open方法可以打开一个url。

例如:Default.aspx?id=3    此url向Default.aspx传递了一个参数id,值为3。
     

服务器端程序:
     

通过:string ID= Request.QueryString["id"];获取前台页面传递过来的id值3。
     

那么在后台获取了id的值,那我就能从数据库某个表中找到这条数据(这里我用的数据库是SQL2008)。假如通过ADO.NET方法连接数据库huangyangzi,在数据表PL中找到了id号为3的这条记录并提取出来赋值给一个变量str,再通过response.write(str);则可以将str的值返回给前台压面。
   

(5)前台页面获取服务器处理后返回的数据。
   

假设前台html页面有:<div id="text">  </div>
  

js脚本中:
   xmlHttp.onreadystatechange = function() {
       if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
           document.getElementByIdx_x("text").innerHTML =   xml.responseText;     //xml是前面定义的  xmlHttpRequest
       }
 }
      

通过这样的方法就能在id为text的div中输出从服务器从数据库中获取的str的值了。    
      
    

这个例子的核心是,在html页面中通过javascript向服务器发送请求,异步传输数据。




ajax框架
Ajax的兼容性问题
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }