ajax

来源:互联网 发布:在淘宝卖手机 编辑:程序博客网 时间:2024/06/14 00:27
对于复杂数据尽量用json代替xml

1.什么是ajax  (Asynchronous JavaScript and Xml)?
(页面中编写代码   .html)
ajax是一种用来改善用户体验的技术  实质是 使用浏览器提供的(ajax对象 XMLHttpRequest)对象异步的向服务器发送请求
(注:异步请求,指的是当ajax对象在向服务器发送请求时 浏览器并不会销毁当前页面 用户仍然可以对当前页面做其他事情)

当服务器响应并返回部分数据(而不是一个完整的数据)时 Ajax会以页面无刷新的效果更改页面中的局部内容


2.能做什么?
典型应用(级联菜单下拉列表)

用于校验输入的值(如用户名)
改善用户体验  当ajax向服务器发送注册请求的时候浏览器的页面不会被销毁 而是依然存在  
不刷新页面的情况下处理更新服务器响应过来的部分数据

优点是:(用户不用等待 可以干其他的事情)


3.在全局中那个位置?
位于浏览器中 代替浏览器向服务器发送信息


4.包括哪些?
1 .js文件  
2.java类
3.html页面
web.xml配置servlet属性
三者相互连接

5.属性方法有:
异步对象的属性和方法
abort():取消请求
getAllResponseHeaders()获取相应的所有Http头
getResponseHeader():获取指定的Http头
open(method,url):创建请求
send():发送求情
重要属性:
1.onreadystatechange:绑定时间处理函数(用来处理onreadystatechange事件)
注:当onreadystatechange属性值发生了改变(从0变成1) 就产生了onreadystatechange事件
2.readystate:有5个值(0,1,2,3,4,)用来获得Ajax对象与服务器
通信的进展(当值是4的时候 表示Ajax对象已经获得了服务器返回的所有的数据)
3.responseText 获得服务器返回的文本数据
4.responseXML 获得服务器返回的xml数据
5.status 获得状态码

方法:
ajax发送异步请求的步骤:
   1.获取Ajax对象:获取XMLHttpRequest对象实例
var xhr=getAjx()
   2.调用ajax对象发送求情
    1>发送get请求
      1》xhr.open(请求类型,请求地址,同步/异步)
       比如:xhr.open('get','check.do?uname=Sally',true)
      2》xhr.onreadystatechange=事件处理函数
       比如:xhr.onreadystatechange=f1
      
       3>xhr=send(null);
     注:true表示异步操作
      同步:当ajax对象发送请求时 浏览器会锁定当前页面(用户对当前不       能做任何操作)
     
    2>发送post请求
    与get的区别 其他都一样
       1》xhr.open('post','check.do',true);
       2》xhr.setRequestHeader('content-type','application/x-www-       form-urlencoded');
       3》xhr.onreadystatechange=f1;
       4》 xhr.send('uname=salary');
 注:(了解)
    按照http协议要求,如果发送的是post请求,请求数据包
    应该包含一个消息头('content-type')。但是,ajax对象
    默认发送的数据包是不带这个消息头的,所以,需要调用
    setRequestHeader方法。


   3.编写服务器程序
   写个servlet方法 重写service
       1.//获得请求资源路径
       String uri=request.getRequestURI();
        2.String action=uri.substring(uri.lastIndexOf("/"),            uri.lastIndexOf("."));
       3.response.setContentType("text/html;charset=utf-8 ");
       4.PrintWriter out=response.getWriter();
       5.out.println();
   4.编写处理函数
    if(xhr==4&&xhr.status==200){
    //获得服务器返回页面
    var txt=xhr.responseText;
    //更新页面
    }    

6.如何获得?
function getXHr(){
    var xhr=null;
    if(window.XMLHttpRequest){
    非ie浏览器
       xhr=new XMLHttpRequest();
    }else{
    ie浏览器
    xhr=new ActiveObject('Microsoft.XMLHttp')
    }
    return xhr;
    }

缓存问题
什么是缓存问题?
1)什么是缓存问题?
    ie浏览器提供的ajax对象在发送get请求时,会比较请求地址是否
访问过,如果该地址之前访问过,则不再发送新的请求,而是显示
第一次访问的结果。
2)如何解决?
在请求地址后面加一个随机数
比如:getnumber.do?+Math.random(),true;

乱码问题?
get
1.服务器中统一用utf-8
2.在客户端使用encodeURI函数对中文编码

post
获取请求前添加request.setCharacterEncoding("utf-8");


json

(javaScript object notation)
是一种轻量级的交换格式


易于读取和编写 同时也易于解析和生成
json是一种完全独立于语言之外

轻量级:相对于xml文档 要小 解析速度快

语法:
表示一个对象{属性名:属性值,属性名:属性值...}
属性值可以是:number string true/false null object
string时必须用双引号括起来

还可以是一个数组
[
{"name":"Sally","city":"北京","age":25}
{"name":"lili","city":"南京","age":28}
]
对象
{
"name":"jerry",
"hobby":["sing","dance","eat"]
}


<emp>   //xml文件
   <name>Sally</name>
   <city>北京</city>
   <age>25</age>
</emp>

代替
//json文件
{"name":"Sally","city":"北京","age":25}


两种结构:
1.名称/值对的集合
2.值得有序列表


数据交换
1.将java对象或者java对象组成的数组/集合转换为json字符串 使用jackson提供的api来转换 还有别的api    www.json.org
      Stock s=new Stock();
      s.setCode("600877");
      ObjectMapper om=new ObjectMapper();
      String str=om.writeValueAsString(om);
2.json字符串转换为javascript对象
使用javscript内置对象json提供的parsejon来转换
还有别的选择 json官方的api 还有一些框架(jquery) 也提供了相应的方法来转换
var str='{"name":"楚乔","age":22}';
    //使用js内置的对象JSON来转换
    var obj=JSON.parse(str);
    alert(obj);