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

[经验分享] Ajax的Server部分(PHP版)

[复制链接]

尚未签到

发表于 2017-3-31 10:01:40 | 显示全部楼层 |阅读模式
Server端的任务通常是根据Client的请求,进行逻辑操作,并将结果响应返回。这个响应通常为XML格式(因此server端需要使用PHP的DOM创建XML响应)

1.PHP使用DOM创建XML响应,供client端的JS解析然后在页面中显示;(因此需要熟练PHP的DOM API)
其实,PHP生成XML的方法有两种:
使用DOM API;(方法一)
另一种是直接将XML的内容echo出去即可;(方法二)
见示例:
HTML页面(包含三个JS触发函数:onmouseover, onmouseout, onclick; 分别触发自己的函数)
DSC0000.gif <!doctypehtmlpublic"-//w3c//dtdhtml4.0tRANSITIONAL//en">
<html>
<head>
<title>ServerPHPAjax</title>
<scripttype="text/javascript"src="js.js"></script>
</head>

<body>
<spanonmouseover="PHPechoXML()"onmouseout="PHPDOMXML()">DefaultWords</span>
<divid="show"></div>
divide
<inputtype="text"id="firstNumber"/>by
<inputtype="text"id="secondNumber"/>
<inputtype="button"value="Send"onclick="CSparameter()"/>
<divid="result"></div>
</body>
</html>


JS页面(分别定义三个JS触发函数:PHPechoXML, PHPDOMXML, 以及CSparameter)
其中有XMLHttpRequest对象创建函数,以及各自的Server响应处理函数
///////1.创建XMLHttpRequest对象
varxmlHttp=createXmlHttpRequestObject();

functioncreateXmlHttpRequestObject()
DSC0001.gif DSC0002.gif
...{
DSC0003.gif
varxmlHttp;

try
DSC0004.gif DSC0005.gif
...{
//trytocreateXMLHttpRequestobject
xmlHttp=newXMLHttpRequest();
DSC0006.gif }

catch(e)
...{
//assumeIE6orolder
varXmlHttpVersions=newArray('MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP');
for(vari=0;i<XmlHttpVersions.length&&!xmlHttp;i++)
...{
try

...{
//trytocreateXMLHttpRequestobject
xmlHttp=newActiveXObject(XmlHttpVersions);
}

catch(e)...{}
}

}

if(!xmlHttp)
alert(
"ErrorcreatingtheXMLHttpRequestobject.");
else
returnxmlHttp;
DSC0007.gif }



///////2.JavaScript事件响应函数(onmouseover触发)
//
readafilefromtheserver
functionPHPechoXML()
...{
//onlycontinueifxmlHttpisn'tvoid
if(xmlHttp)
...{
//trytoconnecttotheserver
try
...{
//initiatereadingafilefromtheserver
//向Server端的PHPechoXML.php文件发送异步请求
xmlHttp.open("GET","PHPechoXML.php",true);
xmlHttp.onreadystatechange
=handleRequestStateChange;
xmlHttp.send(
null);
}

//displaytheerrorincaseoffailure
catch(e)
...{
alert(
"Can'tconnecttoserver: "+e.toString());
}

}

}


///////3.JavaScript事件响应函数(onmouseout触发)
functionPHPDOMXML()
...{
//onlycontinueifxmlHttpisn'tvoid
if(xmlHttp)
...{
//trytoconnecttotheserver
try
...{
//initiatereadingafilefromtheserver
//向Server端的PHPDOMXML.php文件发送异步请求
xmlHttp.open("GET","PHPDOMXML.php",true);
xmlHttp.onreadystatechange
=handleRequestStateChange;
xmlHttp.send(
null);
}

//displaytheerrorincaseoffailure
catch(e)
...{
alert(
"Can'tconnecttoserver: "+e.toString());
}

}

}


//handlestheresponsereceivedfromtheserver,Server端状态回调函数
functionhandleRequestStateChange()
...{

if(xmlHttp.readyState==4)
...{
//continueonlyifHTTPstatusis"OK"
if(xmlHttp.status==200)
...{
try
...{
//readthemessagefromtheserver
varxmlResponse=xmlHttp.responseXML;

//捕获IE和Opera潜在的错误
if(!xmlResponse||!xmlResponse.documentElement)
...{
throw("InvalidXMLstructure: "+xmlHttp.responseText);
}

//捕获FireFox的潜在错误
varrootNodeName=xmlResponse.documentElement.nodeName;
if(rootNodeName=="parsererror")
...{
throw("InvalidXMLstructure: "+xmlHttp.responseText);
}


//获取Server端响应的XML响应并解析,到网页中显示
//obtaintheXML'sdocumentelement
xmlRoot=xmlResponse.documentElement;
//obtainarrayswithbooktitlesandISBNs
cityArray=xmlRoot.getElementsByTagName("city");
//generateHTMLoutput
varhtml="";
//iteratethroughthearraysandcreateanHTMLstructure
for(vari=0;i<cityArray.length;i++)
html
+=cityArray.item(i).firstChild.data+"<br/>";
//obtainareferencetothe<div>elementonthepage
myDiv=document.getElementById("show");
//displaytheHTMLoutput
myDiv.innerHTML="Serversays:<br/>"+html;
}

catch(e)
...{
//displayerrormessage
alert("Errorreadingtheresponse:"+e.toString());
}

}

else
...{
//displaystatusmessage
alert("Therewasaproblemretrievingthedata: "+
xmlHttp.statusText);
}

}

}




///////4.JavaScript事件响应函数(onclick触发)
functionCSparameter()
...{
//onlycontinueifxmlHttpisn'tvoid
if(xmlHttp)
...{
//trytoconnecttotheserver
try
...{

//获取form中的值
varfirstNumber=document.getElementById("firstNumber").value;
varsecondNumber=document.getElementById("secondNumber").value;

//设置为参数,对Server端的CSparameter.php进行异步请求
varparam="firstNumber="+firstNumber+"&secondNumber="+secondNumber;

//initiatereadingafilefromtheserver
xmlHttp.open("GET","CSparameter.php?"+param,true);
xmlHttp.onreadystatechange
=handleRequestStateChangePara;
xmlHttp.send(
null);
}

//displaytheerrorincaseoffailure
catch(e)
...{
alert(
"Can'tconnecttoserver: "+e.toString());
}

}

}


//Server状态改变回调函数(Server端接受Client端传来的参数经过逻辑计算之后返回XML响应,Client端对XML进行解析,返回更新到页面中)
//
handlestheresponsereceivedfromtheserver
functionhandleRequestStateChangePara()
...{

if(xmlHttp.readyState==4)
...{
//continueonlyifHTTPstatusis"OK"
if(xmlHttp.status==200)
http://images.csdn.net/syntaxhighlighting/

运维网声明 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-357988-1-1.html 上篇帖子: PHP生成HTML的技术原理 下篇帖子: PHP 正则判断中文 UTF-8 & GBK
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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