设为首页 收藏本站
查看: 368|回复: 0

[经验分享] Ajax+PHP简单实例

[复制链接]

尚未签到

发表于 2015-8-27 09:48:42 | 显示全部楼层 |阅读模式
  一直用jQuery库,如果不用,还会使用Ajax吗?
  参考书:1.PHP与jQuery开发实例;2.Ajax基础教程 (图灵程序设计丛书就是好)
  把书1里jQuery代码换成原生JS,实例1是选择省份出现城市列表,实例2改成了联动下拉框。
  一、实例1
  html代码:



<form>
<p>
<label for="province">省份:</label>
<select id="choice" name="province">
<option value="">请选择</option>
<option value="JiangSu">江苏省</option>
<option value="AnHui">安徽省</option>
</select>
</p>
<div id="result"></div>   
</form>               
  js代码:



            var xmlHttp;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}

function doSearch(event) {
var province = document.getElementById("choice").value;
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", "data.php?province="+province, false);
xmlHttp.send(null);
}
       //也常取名callBack
function handleStateChange() {
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){                        
                        parseResults();
}
}
}         
function parseResults() {               
document.getElementById("result").innerHTML = xmlHttp.responseText;               
}
       //下拉框值改变出发事件
var evtObject = document.getElementById("choice");
if(evtObject.addEventListener){        
evtObject.addEventListener("change",doSearch,false);
}
else if(evtObject.attachEvent){        
evtObject.attachEvent("onchange",doSearch);
}
  PHP代码:



<?php
if($_GET['province']=='JiangSu'){
$citys = array('南京', '苏州','南通','无锡');   
echo getHTML($citys);
}
else if($_GET['province']=='AnHui'){
$citys = array('合肥', '芜湖','黄山','宣城');
echo getHTML($citys);
}
function getHTML($citys){
$strResult = '<ul>';
for($i=0; $i<count($citys); $i++){
$strResult.='<li>'.$citys[$i].'</li>';
}
$strResult.='</ul>';
return $strResult;
}
?>
  插曲:原书实例中result是<p id="result"></p>,结果在ie6下 innerHTML 报错,所以换成了div。
  
  二、联动下拉框
  XMLHttpRequest对象提供了2个可以用来访问服务器响应的属性:1. responseText; 2. responseXML。
  第二个实例采用从XML文件中读取数据。
  XML代码



<?xml version="1.0" encoding="UTF-8"?>
<provinces>
<province index="1" name="JiangSu">
<name>江苏</name>
<citys>
<city>南京</city>
<city>苏州</city>
<city>南通</city>
<city>无锡</city>
</citys>
</province>
<province index="2" name="AnHui">
<name>安徽</name>
<citys>
<city>合肥</city>
<city>芜湖</city>
<city>黄山</city>
<city>宣城</city>
</citys>
</province>
</provinces>
  PHP代码:



<?php
header("Content-Type: text/xml"); //必须指明,responseXML才能接收
libxml_use_internal_errors(true); //抑制xml错误,便于代码自行处理错误
$objXML = simplexml_load_file('data.xml');
if(!$objXML){
$errors = libxml_get_errors();
foreach($errors as $error){
echo $errors->message,'<br/>';
}
} else {
if($_GET['province']=='JiangSu'){
foreach($objXML->province as $province){
if($province->name == "江苏"){            
echo $province->citys->asXML();  //asXML(),返回xml字符串
}
}   
} else if ($_GET['province']=='AnHui'){
foreach($objXML->province as $province){
if($province->name == "安徽"){            
echo $province->citys->asXML();
}
}   
}
}
?>
  html代码:



    <form>
<p>
<label for="province">省份:</label>
<select id="choice" name="province">               
<option value="JiangSu">江苏省</option>
<option value="AnHui">安徽省</option>
</select>
<label for="citys">城市:</label>
<select id="city" name="citys">  
</select>
</p>     
</form>
  JS代码:



var xmlHttp;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function doSearch(event) {
var province = document.getElementById("choice").value;
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", "data.php?province="+province, false);               
xmlHttp.send(null);
}
function handleStateChange() {
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){
//clearPreviousResults();                        
                        parseResults();
}
}
}        
function parseResults() {
var xmlDoc = xmlHttp.responseXML;            
// var htmlStr="";
var cityName;
if(xmlDoc.getElementsByTagName("city")[0].text){
cityName = "text";    //IE6下 要用text 取 内容
} else {
cityName = "textContent";    //chrome下 要用textContent 取内容
                }            
for(var i=0;i<xmlDoc.getElementsByTagName("city").length;i++){
document.getElementById("city").options = new Option(xmlDoc.getElementsByTagName("city")[cityName],i)                  
                }               
            }
doSearch(); //加载页面的时候先执行一次,因为去掉了“请选择”
var evtObject = document.getElementById("choice");
if(evtObject.addEventListener){        
evtObject.addEventListener("change",doSearch,false);
}
else if(evtObject.attachEvent){        
evtObject.attachEvent("onchange",doSearch);
}
  插曲:ie6下,取城市名 得用 xmlDoc.getElementsByTagName("city")[0].text,而Chrome下用textContent,因此我用字符串cityName代替,并且取城市名的时候用了数组写法,不能用“.”取值。 select 在ie6下 设置innerHTML,页面没效果,但值存在。
  以上2个实例在ie6和chrome下均可运行。哎,兼容性的确让人头疼,第二个实例JS部分花了好长时间才完全调好。时间太晚了,都没劲写感想了,洗洗睡了.......

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-104875-1-1.html 上篇帖子: PHP 位运算 下篇帖子: PHP类的静态(static)方法和静态(static)变量
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表