PHP_AJAX 2015-1-3 11:44 一、AJAX 简介 1、AJAX AJAX = Asynchronous JavaScript And XML(异步 JavaScript 及 XML);AJAX 是 Asynchronous JavaScript And XML 的首字母缩写。 AJAX 并不是一种新的编程语言,而仅仅是一种新的技术,它可以创建更好、更快且交互性更强的 web 应用程序。AJAX 使用 JavaScript 在 web 浏览器与 web 服务器之间来发送和接收数据。通过在幕后与 web 服务器交换数据,而不是每当用户作出改变时重载整个 web 页面,AJAX 技术可以使网页更迅速地响应。 2、AJAX基于哪些开放的标准 JavaScript、XML、HTML、CSS; 在 AJAX 中使用的开放标准被良好地定义,并得到所有主要浏览器的支持。AJAX 应用程序独立于浏览器和平台。(可以说,它是一种跨平台跨浏览器的技术)。 3、AJAX作用 AJAX 事关更好的 Internet 应用程序!为嘛这么说呢?您啊听我慢慢说!与桌面应用程序相比,Web 应用程序有很多优势:可拥有更多用户;更容易安装和维护;更容易开发;但是, 应用程序不总是象传统应用程序那样强大和友好。通过 AJAX,可以使 Internet 应用程序更加强大(更轻巧、更快速,且更易使用)。 4、开始AJAX 没有什么新知识需要学习。AJAX 基于开放的标准。而这些标准已被大多数开发者使用多年。大多数 web 应用程序可通过使用 AJAX 技术进行重写,来替代传统的 HTML 表单。 5、AJAX 使用 XML 和 HTTP 请求 传统的 web 应用程序会把数据提交到 web 服务器(使用 HTML 表单)。在 web 服务器把数据处理完毕之后,会向用户返回一张完整的新网页。由于每当用户提交输入,服务器就会返回新网页,传统的 web 应用程序往往运行缓慢,且越来越不友好。 通过 AJAX,web 应用程序无需重载网页,就可以发送并取回数据。完成这项工作,需要通过向服务器发送 HTTP 请求(在幕后),并通过当服务器返回数据时使用 JavaScript 仅仅修改网页的某部分。一般使用 XML 作为接收服务器数据的格式,尽管可以使用任何格式,包括纯文本。 6、PHP 和 AJAX 不存在什么 AJAX 服务器。AJAX 是一种在浏览器运行的技术。它使用浏览器与 web 服务器之间的异步数据传输,使网页从服务器请求少量的信息,而不是整张页面。 AJAX 是一种独立于 web 服务器软件的 web 浏览器技术。但是,在本教程中,我们将集中在运行在 PHP 服务器上的实际案例,而不是 AJAX 的工作原理。 二、AJAX XMLHttpRequest 前言:XMLHttpRequest 对象使 AJAX 成为可能。 1、创建 XMLHttpRequest 对象 前言:不同的浏览器使用不同的方法来创建 XMLHttpRequest 对象。Internet Explorer 使用 ActiveXObject。其他浏览器使用名为 XMLHttpRequest 的 JavaScript 内建对象。 要克服这个问题,可以使用这段简单的代码达到兼容:
var XMLHttp=null
if (window.XMLHttpRequest)
{
XMLHttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
2、改进代码 前言:有些程序员喜欢使用最新最快的版本来创建XMLHttpRequest 对象。加载微软最新版本的 "Msxml2.XMLHTTP",在 Internet Explorer 6 中可用,如果无法加载,则后退到 "Microsoft.XMLHTTP",在 Internet Explorer 5.5 及其后版本中可用。
// 创建XMLHttpRequest对象
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
// 在 Internet Explorer 6 及更高的版本可用(微软方式)
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
// Internet Explorer 5.5
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
三、PHP 和 AJAX 请求 实例:实现text智能匹配功能 思路: >1、客户端:监听text keyup事件,触发时,进行AJAX请求,发送匹配字串; >2、服务器:接收字串;收集匹配字串并返回以作响应; 1、html form 表单
<html>
<head>
<script src="clienthint.js"></script>
</head>
<body>
<form>
First Name: <input type="text" id="txt1" οnkeyup="showHint(this.value)" />
</form>
<p>Suggestions: <span id="txtHint"></span></p>
</body>
</html>
2、JavaScript
->clienthint.js
var xmlHttp;
function showHint(str)
{
if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var url="gethint.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random(); //添加一个随机数,以防服务器使用缓存文件
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
}
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
3、PHP 页面
->gethint.php
<?php
// 名字数组
$a[]="Anna";
$a[]="Brittany";
$a[]="Cinderella";
$a[]="Diana";
$a[]="Eva";
$a[]="Fiona";
$a[]="Gunda";
$a[]="Hege";
$a[]="Inga";
$a[]="Johanna";
$a[]="Kitty";
$a[]="Linda";
$a[]="Nina";
$a[]="Ophelia";
$a[]="Petunia";
$a[]="Amanda";
$a[]="Raquel";
$a[]="Cindy";
$a[]="Doris";
$a[]="Eve";
$a[]="Evita";
$a[]="Sunniva";
$a[]="Tove";
$a[]="Unni";
$a[]="Violet";
$a[]="Liza";
$a[]="Elizabeth";
$a[]="Ellen";
$a[]="Wenche";
$a[]="Vicky";
// 请求参赛
$q=$_GET["q"];
// 寻求匹配
if (strlen($q) > 0)
{
$hint="";
for($i=0; $i<count($a); $i++)
{
if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
{
if ($hint=="")
{
$hint=$a[$i];
}
else
{
$hint=$hint." , ".$a[$i];
}
}
}
}
// 结果响应
if ($hint == "")
{
$response="no suggestion";
}
else
{
$response=$hint;
}
echo $response; // 想客户端响应;
?>
四、PHP 和 AJAX XML 实例 2015/1/4 0:22 引言:AJAX 可与 XML 文件进行交互式通信。 功能:如何使用 AJAX 技术从 XML 文件中读取信息。 思路: >1、监听select onchange事件;进行AJAX请求; >2、接受请求参数;过滤数据;处理数据;返回数据;
1、HTML表单
<html>
<head>
<script src="selectcd.js"></script>
</head>
<body>
<form>
Select CD:
<select name="cds" οnchange="showCD(this.value)">
<option value="Bob Dylan">Bob Dylan</option>
<option value="Bee Gees">Bee Gees</option>
<option value="Cat Stevens">Cat Stevens</option>
</select>
</form>
<p>
<div id="txtHint"><b>CD info will be listed here.</b></div>
</p>
</body>
</html>
2、XML文件
->cd_catalog.xml
<CATALOG>
<CD>
<TITLE>主题</TITLE>
<ARTIST>作家</ARTIST>
<COUNTRY>国家</COUNTRY>
<COMPANY>公司</COMPANY>
<PRICE>价格</PRICE>
<YEAR>年份</YEAR>
</CD>
</CATALOG>
3、JavaScript
->selectcd.js
var xmlHttp;
function showCD(str)
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var url="getcd.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
// 事件监听
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText
}
}
// 创建XMLHttpRequest对象
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
4、PHP 页面
->getcd.php
<?php
// 1、请求参数
$q=$_GET["q"];
/// XML DOM 解析器
// 2、加载XML
$xmlDoc = new DOMDocument();
$xmlDoc->load("cd_catalog.xml");
// 3、作者数组
$x=$xmlDoc->getElementsByTagName('ARTIST');
// 4、循环数组
for ($i=0; $i<=$x->length-1; $i++)
{
if ($x->item($i)->nodeType==1){// nodeType为1则为元素;
if ($x->item($i)->childNodes->item(0)->nodeValue == $q)
{
$y=($x->item($i)->parentNode); // 保存匹配CD;
}
}
}
// 5、CD子元素
$cd=($y->childNodes);
for ($i=0; $i<$cd->length; $i++)
{
// 向客户端输出响应,输出的属于responseText值;
if ($cd->item($i)->nodeType==1){
echo($cd->item($i)->nodeName);
echo(": ");
echo($cd->item($i)->childNodes->item(0)->nodeValue);
echo("<br />");
}
}
?>
五、PHP 和 AJAX MySQL 数据库实例 引言:AJAX 可用来与数据库进行交互式通信。 实例:如何使用 AJAX 技术从 MySQL 数据库中读取信息。 1、HTML 表单
<html>
<head>
<script src="selectuser.js"></script>
</head>
<body>
<form>
Select User:
<select name="users" οnchange="showUser(this.value)">
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>
<p>
<div id="txtHint"><b>User info will be listed here.</b></div>
</p>
</body>
</html>
2、JavaScript脚本
->selectuser.js
var xmlHttp;
function showUser(str)
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var url="getuser.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged ;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
// xmlHttp.responseText为响应文本
document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
}
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
//Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
3、PHP页面
->getuser.php
<?php
// 请求参数
$q=$_GET["q"];
// 创建链接
$con = mysql_connect('localhost', 'peter', 'abc123');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// 定数据库
mysql_select_db("ajax_demo", $con);
// 执行查询
$sql="SELECT * FROM user WHERE id = '".$q."'";
$result = mysql_query($sql);
// 输出响应
echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
<th>Hometown</th>
<th>Job</th>
</tr>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['FirstName'] . "</td>";
echo "<td>" . $row['LastName'] . "</td>";
echo "<td>" . $row['Age'] . "</td>";
echo "<td>" . $row['Hometown'] . "</td>";
echo "<td>" . $row['Job'] . "</td>";
echo "</tr>";
}
echo "</table>";
// 关闭连接
mysql_close($con);
?>
六、PHP 和 AJAX responseXML 实例 引言:AJAX 可用于以 XML 返回数据库信息。 实例:AJAX Database 转 XML 实例 功能:如何从 MySQL 数据库中读取信息;如何把数据转换为 XML 文档并加以响应; 意义:把 XML 文档作为响应来接收,使我们有能力更新页面的多个位置,而不仅仅是接收一个 PHP 输出并显示出来。 1、HTML 表单
<html>
<head>
<script src="responsexml.js"></script>
</head>
<body>
<form>
Select User:
<select name="users" οnchange="showUser(this.value)">
<option value="1">Peter Griffin</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>
<h2>
<span id="firstname"></span> <span id="lastname"></span>
</h2>
<span id="job"></span>
<div >
<span id="age_text"></span>
<span id="age"></span>
<span id="hometown_text"></span>
<span id="hometown"></span>
</div>
</body>
</html>
2、JavaScript代码
->responsexml.js
var xmlHttp;
function showUser(str)
{
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var url="responsexml.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
// 响应XML
xmlDoc=xmlHttp.responseXML;
// firstname
document.getElementById("firstname").innerHTML=
xmlDoc.getElementsByTagName("firstname")[0].childNodes[0].nodeValue;
// lastname
document.getElementById("lastname").innerHTML=
xmlDoc.getElementsByTagName("lastname")[0].childNodes[0].nodeValue;
// job
document.getElementById("job").innerHTML=
xmlDoc.getElementsByTagName("job")[0].childNodes[0].nodeValue;
// age
document.getElementById("age_text").innerHTML="Age: ";
document.getElementById("age").innerHTML=
xmlDoc.getElementsByTagName("age")[0].childNodes[0].nodeValue;
// hometown
document.getElementById("hometown_text").innerHTML="<br/>From: ";
document.getElementById("hometown").innerHTML=
xmlDoc.getElementsByTagName("hometown")[0].childNodes[0].nodeValue;
}
}
function GetXmlHttpObject()
{
var objXMLHttp=null;
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}
3、PHP 页面
->responsexml.php
<?php
header('Content-Type: text/xml'); // 响应类型;
header("Cache-Control: no-cache, must-revalidate"); // 以防止缓存;
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); //A date in the past
// 请求参数
$q=$_GET["q"];
// 创建链接
$con = mysql_connect('localhost', 'peter', 'abc123');
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// 定数据库
mysql_select_db("ajax_demo", $con);
// 执行查询
$sql="SELECT * FROM user WHERE id = ".$q."";
$result = mysql_query($sql);
// xml响应
echo '<?xml version="1.0" encoding="ISO-8859-1"?>
<person>';
while($row = mysql_fetch_array($result))
{
echo "<firstname>" . $row['FirstName'] . "</firstname>";
echo "<lastname>" . $row['LastName'] . "</lastname>";
echo "<age>" . $row['Age'] . "</age>";
echo "<hometown>" . $row['Hometown'] . "</hometown>";
echo "<job>" . $row['Job'] . "</job>";
}
echo "</person>";
// 关闭连接
mysql_close($con);
?>
七、PHP 和 AJAX Live Search 引言:AJAX 可为用户提供更友好、交互性更强的搜索体验。 1、AJAX Live Search 前言:AJAX Live Search,实时搜索;实时的搜索与传统搜索相比,具有很多优势: 当键入数据时,显示匹配结果; 当继续键入数据时,结果过滤; 如果结果太少,删除字符可获得更宽范围; 2、实时搜索实例 (1)、XML文档
->links.xml
<pages>
<link>
<title>页面标题</title>
<url>页面地址</url>
</link>
</pages>
(2)、HTML页面
->livesearch.html
<html>
<head>
<script src="livesearch.js"></script>
<style type="text/css">
#livesearch
{
margin:0px;
width:194px;
}
#txt1
{
margin:0px;
}
</style>
</head>
<body>
<form>
<input type="text" id="txt1" size="30" οnkeyup="showResult(this.value)">
<div id="livesearch"></div>
</form>
</body>
</html>
(3)、JavaScript代码
->livesearch.js
var xmlHttp;
function showResult(str)
{
if (str.length==0)
{
document.getElementById("livesearch").innerHTML="";
document.getElementById("livesearch"). style.border="0px";
return;
}
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var url="livesearch.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("livesearch").innerHTML=xmlHttp.responseText;
document.getElementById("livesearch").style.border="1px solid #A5ACB2";
}
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
(4)、PHP 页面
->livesearch.php
// 代码会搜索 XML 文件中匹配搜索字符串的标题,并以 HTML 返回结果
<?php
// 加载XML
$xmlDoc = new DOMDocument();
$xmlDoc->load("links.xml");
// 连接数组
$x=$xmlDoc->getElementsByTagName('link');
// 请求参数
$q=$_GET["q"];
// 寻找匹配
if (strlen($q) > 0)
{
$hint=""; // 响应字串;
for($i=0; $i<($x->length); $i++)
{
$y=$x->item($i)->getElementsByTagName('title'); //title元素数组;
$z=$x->item($i)->getElementsByTagName('url'); //url元素数组;
if ($y->item(0)->nodeType==1)
{
// 是否匹配_stristr()_查找字符串在另一字符串中第一次出现的位置(大小写不敏感)
if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q))
{
if ($hint=="")
{
$hint="<a href='" . $z->item(0)->childNodes->item(0)->nodeValue . "' target='_blank'>" .
$y->item(0)->childNodes->item(0)->nodeValue . "</a>";
}
else
{
$hint=$hint . "<br /><a href='" . $z->item(0)->childNodes->item(0)->nodeValue . "' target='_blank'>" .
$y->item(0)->childNodes->item(0)->nodeValue . "</a>";
}
}
}
}
}
// 返回响应
if ($hint == "")
{
$response="no suggestion";
}
else
{
$response=$hint;
}
echo $response;
?>
八、PHP 和 AJAX RSS 阅读器_2015/1/5 0:40 引言:RSS 阅读器用于阅读 RSS Feed(订阅)。RSS 允许对新闻和更新进行快速浏览。 实例:AJAX RSS 阅读器实现,通过它,来自 RSS 的内容在不进行刷新的情况下载入网页。 1、HTML表单
->getrss.html
<html>
<head>
<script type="text/javascript" src="getrss.js"></script>
</head>
<body>
<form>
Select an RSS-Feed:
<select οnchange="showRSS(this.value)">
<option value="Google">Google News</option>
<option value="MSNBC">MSNBC News</option>
</select>
</form>
<p>
<div id="rssOutput">
<b>RSS Feed will be listed here.</b>
</div>
</p>
</body>
</html>
2、JavaScript代码
->getrss.js
var xmlHttp;
function showRSS(str)
{
xmlHttp=GetXmlHttpObject();
if(xmlHttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var url="getrss.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("rssOutput").innerHTML=xmlHttp.responseText;
}
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
3、PHP 页面
->getrss.php
<?php
// 请求参数
$q=$_GET["q"];
// 订阅XML
if($q=="Google")
{
$xml=("http:///news?ned=us&topic=h&output=rss");
}
elseif($q=="MSNBC")
{
$xml=("http://rss.msnbc.msn.com/id/3032091/device/rss/rss.xml");
}
// 加载XML
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
// 首个channel
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
// channel标题
$channel_title = $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
// channel链接
$channel_link = $channel->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
// channel描述
$channel_desc = $channel->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
// 输出channel信息
echo("<p><a href='".$channel_link."'>".$channel_title ."</a>");
echo("<br />");
echo($channel_desc."</p>");
//输出item元素
$x=$xmlDoc->getElementsByTagName('item');
for ($i=0; $i<=2; $i++)
{
// 标题
$item_title=$x->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
// 链接
$item_link=$x->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
// 描述
$item_desc=$x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
// 输出
echo ("<p><a href='".$item_link."'>".$item_title ."</a>");
echo ("<br />");
echo ($item_desc . "</p>");
}
?>
九、PHP 和 AJAX 投票(Poll) 实例:AJAX 投票,投票程序,网页在不重新加载的情况下,就可以获得结果。 1、HTML表单
<html>
<head>
<script src="poll.js"></script>
</head>
<body>
<div id="poll">
<h2>Do you like PHP and AJAX so far?</h2>
<form>
Yes: <input type="radio" name="vote" value="0" οnclick="getVote(this.value)"><br />
No: <input type="radio" name="vote" value="1" οnclick="getVote(this.value)">
</form>
</div>
</body>
</html>
2、文本文件_存储来自投票程序的数据。注释:记得只允许您的 web 服务器来编辑该文本文件。不要让其他人获得访问权,除 web 服务器 (PHP)。 ->poll_result.txt 0||0 3、JavaScript
->poll.js
var xmlHttp;
function getVote(int)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Browser does not support HTTP Request");
return;
}
var url="poll_vote.php";
url=url+"?vote="+int;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("poll").innerHTML=xmlHttp.responseText;
}
}
function GetXmlHttpObject()
{
var objXMLHttp=null;
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
return objXMLHttp;
}
4、PHP页面
->poll_vote.php
<?php
// 请求参数
$vote = $_REQUEST['vote'];
// 读取文件:file()函数把整个文件读入数组中,以行为单元;
$filename = "poll_result.txt";
$content = file($filename);
// 处理数据:化成数组
$array = explode("||", $content[0]); //把第一行字符串打散为数组;
$yes = $array[0];
$no = $array[1];
if ($vote == 0)
{
$yes = $yes + 1;
}
if ($vote == 1)
{
$no = $no + 1;
}
// 写入文件:把结果写入文本
$insertvote = $yes."||".$no;
$fp = fopen($filename,"w"); // 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
fputs($fp,$insertvote); // fputs() 函数写入文件(可安全用于二进制文件)。fputs() 函数是 fwrite() 函数的别名。
fclose($fp);
?>
<h2>Result:</h2>
<table>
<tr>
<td>Yes:</td>
<td>
<!--round(x,prec) 函数对浮点数进行四舍五入。prec规定小数点后的位数-->
<img src="poll.gif" width='<?php echo(100 * round($yes/($no+$yes),2)); ?>' height='20'>
<?php echo(100 * round($yes/($no+$yes),2)); ?>%
</td>
</tr>
<tr>
<td>No:</td>
<td>
<img src="poll.gif" width='<?php echo(100 * round($no/($no+$yes),2)); ?>' height='20'>
<?php echo(100 * round($no/($no+$yes),2)); ?>%
</td>
</tr>
</table>