AJAX学习

AJAX学习

Ajax

asynchronous javascript and xml:异步的js和xml
他能使用js访问服务器,而且是异步访问。
服务器给客户端的响应一般是整个页面,一个html完整页面。但在ajax中因为是局部刷新,那么服务器就不用再响应整个页面,而只是数据。

数据交互方式:

-text:纯文本
-xml
-json:是js提供的一种数据交互格式

异步交互和同步交互

同步:
-发送一个请求,就要等待服务器的响应结束,然后才能发第二个请求。
-刷新的是整个页面。
异步:
-发一个请求后,无需等待服务器的响应,然后就可以发送第二个请求。
-可以使用js接收服务器的响应,然后使用js来局部刷新。

Ajax的优缺点

-优点:
异步交互,增强了用户的体验
性能,因为服务器无需再响应整个页面,只需要响应部分内容,所以服务器的压力减轻了。
-缺点:
Ajax不能应用在所有场景
Ajax无端的增多了对服务器的访问次数,给服务器带来了压力。

Ajax发送异步请求(四步操作)

第一步(得到XMLHttpRequest):

1.得到XMLHttpRequest
-大部分浏览器都支持:var xmlHttp = new XMLHttpRequest();
-IE6.0:var xmlHttp = new ActiceXObject(“Msxml2.XMLHTTP”);
IE5.5以及更早版本:var xmlHttp = new ActivexObject(“Microsoft.XMLHTTP”);

第二步(打开与服务器的连接):

xmlHttp.open();用来打开与服务器的连接,需要三个参数
-请求方式:可以是get或post
请求的url:指定服务器端资源,例如:/demo/AServlet
请求是否为异步:如果为true表示发送异步请求,否则同步请求。
xmlHttp.open(“GET”,"/demo/AServlet",true);

第三部(发送请求):

xmlHttp.send(null); // 如果不给null参数会造成部分浏览器无法发送
参数:就是请求体内容。如果是get请求,必须给出null。

第四步:

在xmlHttp对象的一个事件上注册监听器:onreadystatechange
-xmlHttp对象一共有5个状态:
0状态:刚创建,还没有调用open方法
1状态:请求开始,调用了open方法,但还没有调用send方法。
2状态:调用完了send方法了
3状态:服务器已经开始响应了,但不表示响应结束了
4状态:服务器响应结束。
-得到xmlHttp对象的状态
var state = xmlHttp.readyState; // 可能是0,1,2,3,4
-得到服务器响应的状态码
var status = xmlHttp.status; // 例如 200,404,500
-得到服务器响应的内容
var content = xmlHttp.responseText; // 得到服务器响应的文本格式的内容
var content = xmlHttp.responseXML; // 得到服务器的响应的xml格式的内容

XMLHttpRequest对象

XMLHttpRequest是Ajax的基础。
创建XMLHttpRequest对象的语法:
var xmlhttp = new XMLHttpRequest();
IE5,IE5语法:
var xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);

实例

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

向服务器发送请求

使用XMLHttpRequest对象的open()方法和send()方法
–open(method,url,async)
规定请求的类型,URL以及是否异步处理请求
method:请求的类型,GET,POST
url:文件在服务器上的位置
async:true(异步)或false(同步)

–send(String)
将请求发送到服务器
string:仅用于POST请求

GET与POST

与POST对比,GET更简单更快。
以下情况需要使用POST:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST没有数据量限制)
发送包含未知字符的用户输入时,POST比GET更稳定更可靠。

GET请求

xmlhttp.open(“GET”,"/try/ajax/demo_get.php",true);
xmlhttp.send();
可能得到的是缓存的结果。为了避免这种情况,可以向url添加一个唯一的id
xmlhttp.open(“GET”,"/try/ajax/demo_get.php?t=" + Math.random(),true);
xmlhttp.send();
如果需要通过GET方法发送信息,可以向url添加信息
xmlhttp.open(“GET”,"/try/ajax/demo_get2.php?fname=Henry&lname=Ford",true);
xmlhttp.send();

POST请求

xmlhttp.open(“POST”,"/try/ajax/demo_post.php",true);
xmlhttp.send();
如果要POST数据,需要使用setRequestHeader()来添加HTTP头。然后在send方法中给定发送的数据
xmlhttp.open(“POST”,"/try/ajax/demo_post2.php",true);
xmlhttp.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”);
xmlhttp.send(“fname=Henry&lname=Ford”);

-setRequestHeader(header,value)
向请求添加HTTP头
header 规定头的名称
value 规定头的值

url - 服务器上的文件

open()方法的url参数是服务器上文件的地址
该文件可以是任何类型的文件。

异步 - true 或 false

XMLHttpRequest 对象如果要用于 AJAX 的话,其 open() 方法的 async 参数必须设置为 true

服务器响应

获得来自服务器的响应,使用XMLHttpRequest对象的responseText或responseXMl属性。
responseText:获得字符串形式的响应数据
responseXMl:获得xml形式的响应数据

onreadystatechange事件

当请求被发送到服务器时,需要执行一些基于响应的任务。
每当readyState改变时,就会触发onreadystatechange事件。。
readyState属性存有XMLHttpRequest的状态信息。
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
status的状态:
200: “OK”
404: 未找到页面

jQuery对ajax异步操作的封装

常用方式:$ .ajax,$ .post,$ .get,$ .getJSON

$.ajax

这是jQuery对ajax最基础的封装,可以实现异步通讯的所有功能
参数:
method // 数据的提交方式:get,post
url // 数据的提交路径
async // 是否支持异步刷新,默认是true
data // 需要提交的数据
dataType // 服务器返回数据的类型
success // 请求成功后的回调函数
error // 请求失败后的回调函数
实例:

$.ajax({
    type:"post",
    url:"/xxx/xxx",
    data:{
        "id" : "admin"
    }, // 数据,这里使用的是json格式进行传输
    success: function(res) {
        // 请求成功后的回调函数
    },
    error: function() {
        // 请求失败后的回调函数
    }
});

$.post

这是对$ .ajax进行了更进一步的封装。$.post简化了数据的提交方式,只能使用post方式提交数据。
只能是异步访问服务器,不能同步访问,不能进行错误处理。
参数:
url 发送地址
data 待发送的key/value参数
callback 发送成功是回调函数
type 返回内容格式:xml,html,script,json,text,default
语法格式
$.post( url [, data ] [, success ] [, dataType ] )

$.get

这是对$.get的封装,只能使用get提交数据
语法格式
$.get( url [, data ] [, success ] [, dataType ] )

$.getJSON

这是进一步的封装,即对返回数据类型为json进行操作。
参数:
url,[data],[callback]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值