Ajax技术

一、什么是ajaxjavascript

    ajax(asynchronouse javascript and xml) 异步的javascript xmlphp

    7种技术的综合,它包含了七个技术( javascript xml xstl xhtml dom xmlhttprequest , css),  ajax  是一个粘合剂,css

    ajax是一个与服务端语言无关的技术. 便可以使用在(php/java ee/.net网站/ asp)html

    ajax能够给客户端返回三种格式数据(文本格式 xml , json格式)java

    无刷新数据交换技术有如下: flash, java applet, 框架, iframe,  ajax)node

 

二、ajax运行原理:ajax

 

使用ajax与服务器通讯的的步骤(如上方右图所示)数据库

    建立一个XMLHttpRequest对象json

    建立url,data,经过 xmlHttpRequest.send()数组

    服务器端接收 ajax的请求,作相应处理(操做数据库),而后返回结果

    客户端经过xmlHttpRequest的属性 reponseText , responseXML 取的数据,而后就完成局部刷新当前页面任务

三、ajax在哪里用的多

1 动态加载数据,按需取得数据。【树形菜单、联动菜单.../省市联动】

2 改善用户体验。【输入内容前提示、带进度条文件上传...

3 电子商务应用。 【购物车、邮件订阅...

4 访问第三方服务。    【访问搜索服务、rss阅读器】

5. 数据的布局刷新

 

四、u  经典的案例

1.      使用 ajax完成用户名的验证

 

用户注册页面(register页面)Gert方式请求

 <script type="text/javascript">
 var xmlhttprequest;
 function sendRequest(){
  var username=document.getElementById("username").value;
  alert(username);
  if(window.ActiveXObject){
      xmlhttprequest = new ActiveXObject("Microsoft.XMLHTTP");
  }else{
      xmlhttprequest = new XMLHttpRequest();
  }
  if(xmlhttprequest){
   xmlhttprequest.open("GET","/AajxTest/AjaxTest2.do?method=ajaxRequest&name="+username,true)
   xmlhttprequest.onreadystatechange=chuli;
   xmlhttprequest.send();
   
  }
 
 }
 function chuli(){
  if(xmlhttprequest.readyState == 4){
   if(xmlhttprequest.status==200){
    document.getElementById("myres").value=xmlhttprequest.responseText;
     alert(xmlhttprequest.responseText);
   }else{
    document.getElementById("myres").value=xmlhttprequest.responseText;
   }
  }
 }
 
 
 
 </script>
  </head>
  
  <body>
   <form action="#" method="post">
    用户名字:<input type="text" name="username1" id="username"><input type="button" onclick="sendRequest();" value="验证用户名">
    <input style="border-width: 0;color:red" type="text" id="myres">
    <br/>
    用户密码:<input type="password" name="password"><br>
    电子邮件:<input type="text" name="email"><br/>
    <input type="submit" value="用户注册">
    </form>
  </body>
</html>

Action里的代码:

public void ajaxRequest(ActionMapping arg0, ActionForm arg1,

  HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {

 arg3.setContentType("text/xml;charset=UTF-8");

 String param = arg2.getParameter("name");

 System.out.println(param);

 PrintWriter out = arg3.getWriter();

 if(param != null && !param.equals("cws")){

  out.print("用户名可用");

 }else{

  out.print("用户名不可用");

 }

 out.close();

 //return null;

}

u  ajaxpost方式请求

 

在前面案例咱们修改一下

 

 

关键代码

register.php

var url="/ajax/registerProcess.php";
                     //这个是要发送的数据
                     var data="username="+$('username').value;
                     //打开请求.
                     myXmlHttpRequest.open("post",url,true);
                     //还有一句话,这句话必须.
                     myXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                     //指定回调函数.chuli是函数名
                     myXmlHttpRequest.onreadystatechange=chuli;
 
                     //真的发送请求,若是是get请求则填入 null便可
                     //若是是post请求,则填入实际的数据
                     myXmlHttpRequest.send(data);
registerPro.php关键码 :
$username=$_POST['username'];

u  ajax如何处理返回的数据格式是xml的状况

 

register.php
 
<html>
<head>
<title>用户注册</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<script type="text/javascript">
 
       //建立ajax引擎
       function getXmlHttpObject(){
              
              var xmlHttpRequest;
              //不一样的浏览器获取对象xmlhttprequest 对象方法不同
              if(window.ActiveXObject){
                     
                     xmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");
                     
              }else{
 
                     xmlHttpRequest=new XMLHttpRequest();
              }
 
              return xmlHttpRequest;
 
       }
       var myXmlHttpRequest="";
 
       //验证用户名是否存在
       function checkName(){
              
              myXmlHttpRequest=getXmlHttpObject();
 
              //怎么判断建立ok
              if(myXmlHttpRequest){
                     
                     //经过myXmlHttpRequest对象发送请求到服务器的某个页面
                     //第一个参数表示请求的方式, "get" / "post"
                     //第二个参数指定url,对哪一个页面发出ajax请求(本质仍然是http请求)
                     //第三个参数表示 true表示使用异步机制,若是false表示不使用异步
                     var url="/ajax/registerProcess.php";
                     //这个是要发送的数据
                     var data="username="+$('username').value;
                     //打开请求.
                     myXmlHttpRequest.open("post",url,true);
                     //还有一句话,这句话必须.
                     myXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                     //指定回调函数.chuli是函数名
                     myXmlHttpRequest.onreadystatechange=chuli;
 
                     //真的发送请求,若是是get请求则填入 null便可
                     //若是是post请求,则填入实际的数据
                     myXmlHttpRequest.send(data); 
 
 
              }
       }
 
       //回调函数
       function chuli(){
              
              //window.alert("处理函数被调回"+myXmlHttpRequest.readyState);
              //我要取出从registerPro.php页面返回的数据
              if(myXmlHttpRequest.readyState==4){
                     
                     //取出值,根据返回信息的格式定.text
                     //window.alert("服务器返回"+myXmlHttpRequest.responseText);
 
                     //$('myres').value=myXmlHttpRequest.responseText;
 
                     //看看若是取出 xml格式数据
                     //window.alert(myXmlHttpRequest.responseXML);
              
                     //获取mes节点
                     var mes=myXmlHttpRequest.responseXML.getElementsByTagName("mes");
 
                     //取出mes节点值
                     //window.alert(mes.length);
                     //mes[0]->表示取出第一个mes节点
                     //mes[0].childNodes[0]->表示第一个mes节点的第一个子节点
                     var mes_val=mes[0].childNodes[0].nodeValue;
 
                     $('myres').value=mes_val;
              }
       }
 
       //这里咱们写一个函数
       function $(id){
              return document.getElementById(id);
       }
</script>
</head>
<body>
       <form action="???" method="post">
    用户名字:<input type="text"    name="username1" id="username"><input type="button" onclick="checkName();"  value="验证用户名">
    <input style="border-width: 0;color: red" type="text" id="myres">
    <br/>
    用户密码:<input type="password" name="password"><br>
    电子邮件:<input type="text" name="email"><br/>
    <input type="submit" value="用户注册">
    </form>
     <form action="???" method="post">
    用户名字:<input type="text" name="username2" >
   
    <br/>
    用户密码:<input type="password" name="password"><br>
    电子邮件:<input type="text" name="email"><br/>
    <input type="submit" value="用户注册">
    </form>
 
</body>
</html>
 
 
regisgerProcess.php
 
<?php
       
       //这里两句话很重要,第一讲话告诉浏览器返回的数据是xml格式
       header("Content-Type: text/xml;charset=utf-8");
       //告诉浏览器不要缓存数据
       header("Cache-Control: no-cache");
 
       //接收数据(这里要和请求方式对于 _POST 仍是 _GET)
       $username=$_POST['username'];
 
       //这里咱们看看如何处理格式是xml
       $info="";
       if($username=="shunping"){
              $info.="<res><mes>用户名不能够用,对不起</mes></res>";//注意,这里数据是返回给请求的页面.
       }else{
              $info.="<res><mes>用户名能够用,恭喜</mes></res>";
       }
 
       echo $info;
       
 
?>   
 
u  ajax如何处理json数据格式
 
①    json的格式以下 :
 
"{属性名:属性值,属性名:属性值,.... }"
由于json数据是原生态数据,所以这种数据格式很稳定,并且描述能力强,咱们建议你们使用json格式
 
②    json数据格式的扩展
 
若是服务器返回的json 是多组数据,则格式应当以下:
 
$info="[{"属性名":"属性值",...},{"属性名":"属性值",...},....]";
 
在xmlhttprequest对象接收到json数据后,应当这样处理
 
 
//转成对象数组
 
var reses=eval("("+xmlHttpRequest.responseText+")");
 
//经过reses能够取得你但愿的任何一个值
 
reses[?].属性名
 
 
③    更加复杂的json数据格式
 
<script language="JavaScript">
     var people ={
            "programmers":
              [
                {"firstName": "Brett", "email": "brett@newInstance.com" },
                {"firstName": "Jason", "email": "jason@servlets.com" }
              ],
            "writer":
                     [
                            {"writer":"宋江","age":"50"},
                            {"writer":"吴用","age":"30"}
                     ],
                     "sex":"男"
                      
};
 
 
window.alert(people.programmers[0].firstName);
window.alert(people.programmers[1].email);
 
window.alert(people.writer[1].writer);
window.alert(people.sex);
 </script>
相关文章
相关标签/搜索