ajax 基础学习

前端之家收集整理的这篇文章主要介绍了ajax 基础学习前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
1 ajax的概念
1)2005年Jesse James Garrett发表了一篇文章标题为:“Ajax:A new Approach to Web Applications”。
2)Ajax,是Asynchronous JavaScript + XML的简写。这种技术能够想服务器请求额外的数据而无须卸载页面(即刷新),会带来更好的用户体验。

2 XMLHttpRequest(简称XHR)对象
1) var xhr = new XMLHttpRequset( ) ; // IE8+ 以及其他所有浏览器都支持
2) xhr.open('get'/'post','url',false/true) ; // 准备发送请求,但还没有发送,true表示异步,false同步
3) xhr.send( 'data') ; //真正发送。 使用get方式则在url那里拼接所以这里传null,否则使用post要传data数据
4) xhr.responseText ; responseXml,status,statusText // 获取从服务器端获取的数据文本,IE获取的是缓存数据,所以要进行缓存清理
5) xhr.open('get'/'post','url?data='+math.random( ),false/true) ; // 巧妙的避免了IE浏览器加载缓存数据
6)使用ajax异步发送请求和局部刷新,是ajax的真正核心:
var xhr = new HMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.status == 200){
// xhr.readystate 有5个值,0 1 2 3 4,4表示接收完成
if( xhr.status == 200 && xhr.readyState == 4 ){ // 这里必须要这么判断,否则报错!原因就是3的时候也是200
// process responseText ;
}
}else{
//do nothing
}
}
xhr.open('post',true);
xhr.send(data);
//xhr.abort() ; 阻止发送异步请求

使用异步调用的时候,需要触发readystatechange事件,然后检测readyState属性即可。这个属性有五个值:

状态

说明

0

未初始化

尚未调用open()方法

1

启动

已经调用open()方法,但尚未调用send()方法

2

发送

已经调用send()方法,但尚未接受响应

3

接受

已经接受到部分响应数据 这个时候 xhr.status == 200,那么数据接收还不全导致处理异常

4

完成

已经接受到全部响应数据,而且可以使用这个时候 xhr.status == 200,完全就收数据


3 GET 与 POST
1)get请求方式使用url携带参数,一般的url请求就是使用get
url?name=value&name=value2
2)post请求方式使用url+参数发送的方式,一般表单提交或者重要数据发送时
xhr.send('name=value&name1=value2');
3)头信息有两种:
响应头信息:服务器返回的信息,客户端可以获取,但是不可以设置、
xhr.getAllResponseHeader(); xhr.getResponseHeader('Content-Type');
请求头信息:客户端发送信息,客户端可以设置但不可以获取
xhr.setRequestHeader('name',value ); 在open 与 send 之间设置
4)解决中文乱码问题:Ajax从服务器返回的数据是默认采用utf-8编码,那么需要对所有编码设置为utf-8,而且对文本编辑器也要设置utf-8 的编码方式!对于特殊字符处理比如参数中有&或?,那么需要采用encodeUrlComponent函数处理。
5)自己编写 封装 ajax 的方法
<script type="text/javascript" charset="utf-8">
function ajax(obj){
var xhr = new XMLHttpRequest();
var method = '' ;
if(obj.method == 'get'){
// get 请求方式
method = 'get';
obj.url = obj.url+'?'+obj.data;
}else{
// 默认 post 请求方式
method = 'post';
}
if(obj.asyn){
// 异步发送请求处理
xhr.onreadystatechange = function(){
if(xhr.status == 200 && xhr.readyState == 4){
obj.success(xhr.responseText);
}
}
}
xhr.open(method,obj.url,obj.asyn);
if(method == 'post'){
xhr.send(obj.data);
}else{
xhr.send(null);
}
if(!obj.asyn){
// 同步发送请求处理
if(xhr.status == 200){
obj.success(xhr.responseText);
}
}
}

window.onload = function(){
var form = document.forms[0];
form.addEventListener('submit',function(event){
event.preventDefault();
ajax( {
method:'get',
url:'http://localhost:8080/test/data.txt',
asyn:false,
data:'name=hello',
success:function(result){
var jsonObj = JSON.parse(result);
alert(jsonObj[1].name+':'+jsonObj[1].age);
}});
},false);
}
</script>
原文链接:https://www.f2er.com/ajax/165334.html

猜你在找的Ajax相关文章