AJAX 可用来与数据库进行交互式通信。
下面的实例将演示网页如何通过 AJAX 从数据库读取信息:
本教程使用到的 Websites 表 SQL 文件:websites.sql。
选择一个网站: Google /淘宝 /微博/ Facebook
选择对应选项,用户信息会显示在这……
在上面的实例中,我们使用的数据库表如下所示:
- mysql> select * from websites;
- +----+--------------+---------------------------+-------+---------+
- | id | name | url | alexa | country |
- +----+--------------+---------------------------+-------+---------+
- | 1 | Google | https://www.google.cm/ | 1 | USA |
- | 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
- | 3 | 微博 | http://weibo.com/ | 20 | CN |
- | 4 | Facebook | https://www.facebook.com/ | 3 | USA |
- +----+--------------+---------------------------+-------+---------+
- 5 rows in set (0.01 sec)
当用户在上面的下拉列表中选择某位用户时,会执行名为 "showSite()" 的函数。该函数由 "onchange" 事件触发:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>菜鸟教程(runoob.com)</title>
- <script>
- function showSite(str)
- {
- if (str=="")
- {
- document.getElementById("txtHint").innerHTML="";
- return;
- }
- if (window.XMLHttpRequest)
- {
- // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
- xmlhttp=new XMLHttpRequest();
- }
- else
- {
- // 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","getsite_mysql.php?q="+str,true);
- xmlhttp.send();
- }
- </script>
- </head>
- <body>
-
- <form>
- <select name="users" onchange="showSite(this.value)">
- <option value="">选择一个网站:</option>
- <option value="1">Google</option>
- <option value="2">淘宝</option>
- <option value="3">微博</option>
- <option value="4">Facebook</option>
- </select>
- </form>
- <br>
- <div id="txtHint"><b>网站信息显示在这里……</b></div>
-
- </body>
- </html>
showSite() 函数会执行以下步骤:
上面这段通过 JavaScript 调用的服务器页面是名为 "getsite_mysql.php" 的 PHP 文件。
"getsite_mysql.php" 中的源代码会运行一次针对 MySQL 数据库的查询,然后在 HTML 表格中返回结果:
- $q = isset($_GET["q"]) ? intval($_GET["q"]) : '';
-
- if(empty($q)) {
- echo '请选择一个网站';
- exit;
- }
-
- $con = mysqli_connect('localhost','root','123456');
- if (!$con)
- {
- die('Could not connect: ' . mysqli_error($con));
- }
- // 选择数据库
- mysqli_select_db($con,"test");
- // 设置编码,防止中文乱码
- mysqli_set_charset($con, "utf8");
-
- $sql="SELECT * FROM Websites WHERE id = '".$q."'";
-
- $result = mysqli_query($con,$sql);
-
- echo "
ID 网站名 网站 URL Alexa 排名 国家 ";-
- while($row = mysqli_fetch_array($result))
- {
- echo "
";- echo "
" . $row['id'] . " "; - echo "
" . $row['name'] . " "; - echo "
" . $row['url'] . " "; - echo "
" . $row['alexa'] . " "; - echo "
" . $row['country'] . " "; - echo "
"; - }
- echo "
"; -
- mysqli_close($con);
- ?>
解释:当查询从 JavaScript 发送到 PHP 文件时,将发生: