AJax技术

Ajax和跨域问题深入解析

字号+ 作者:H5之家 来源:H5之家 2017-04-28 10:01 我要评论( )

Ajax和跨域问题深入解析,什么是ajaxAjax(AsynchronousjavascriptandXML),是一种可以向服务器请求额外的数据并且无需刷新页面的技术,ajax的出现带来了更好的用户

什么是ajax
Ajax(Asynchronous javascript and XML),是一种可以向服务器请求额外的数据并且无需刷新页面的技术,ajax的出现带来了更好的用户体验.
Ajax的核心就是XMLHttpRequest(XHR)对象.XHR为向服务器发送请求和解析服务器响应提供了流畅的接口.可以使用XHR对象获取新数据,通过DOM将新数据插入到页面.虽然名字中包含XML,但是ajax通信和数据格式无关;这种技术就是可以不用刷新就从服务器获取数据,但是不一定是XML数据,也可以是json.

XMLHttpRequest对象

XHR的用法

1.创建一个XMLHttpRequest对象

2.发送请求

1).设置请求行 xhr.open()
2).POST请求需要设置请求头 xhr.setRequestHeader() POST请求头Content-Type的值: application/x-www-form-urlencoded
3).设置请求体 xhr.send() get请求传null,post根据情况

3.处理服务器响应

先判断响应状态码和异步对象是否解析完毕.

服务器返回的状态码 status

1xx:消息
2xx:成功
3xx:重定向
4xx:请求错误
5xx:服务器错误

异步对象的状态码 readystate

0:异步对象已经创建
1:异步对象初始化完成,发送请求
2:接收服务器返回的原始数据
3:数据正在解析,解析需要时间
4:数据解析完成,数据可以使用了

XML

XML的特点,出身名门,W3C制定,微软和IBM曾经共同大力推荐过的数据格式.XML 指可扩展标记语言(Extensible Markup Language),被设计用来传输和存储数据,HTML 是设计用来表示页面的.

语法规则:和HTML差不多,都是通过标记来表示的
特殊符号:比如<>要使用实体-转移字符
xml的解析需要前后台配合:
1.后台在返回的时候,在响应头中设置Content-Type的值为 application/xml
2.前台异步对象在接收后台数据时,记得按照xml的方式来接收,xhr.responseXML,并且它返回的是一个object对象,内容是#document

JSON

JSON(JavaScript Object Notation),出身草根,是 Javascript 的子集,专门负责描述数据格式.JSON本身是一个特殊格式的字符串,可以转换成js对象,是网络上用来传输数据使用最广泛的数据格式,没有之一.

语法规则:数据以 key/value 值对表示,数据由逗号分隔,大括号保存对象,中括号保存数组,名称和值都需要使用双引号包含(这个是和js的一点小区别).
js中解析/操作JSON:
1.JSON.parse(json字符串); 将一个json格式的字符串解析成js对象
2.JSON.stringify(js对象); 将一个js对象转成一个json格式的字符串

自己封装一个ajax

function pinjieData(obj) {
//obj 就相当于 {key:value,key:value}
//最终拼接成键值对的字符串 "key:value,key:value"
var finalData = "";
for(key in obj){
finalData+=key+"="+obj[key]+"&"; //key:value,key:value&
}
return finalData.slice(0,-1);//key:value,key:value
}
function ajax(obj) {
var url = obj.url;
var method = obj.method.toLowerCase();
var success = obj.success;
var finalData = pinjieData(obj.data);
//finalData最终的效果key:value,key:value
//1.创建xhr对象
var xhr = new XMLHttpRequest();
//get方法拼接地址,xhr.send(null)
if (method=='get'){
url = url + "?"+finalData;
finalData = null;
}
//2.设置请求行
xhr.open(method,url);
// 如果是post请求,要设置请求头
if (method=='post'){
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
}
//3.发送
xhr.send(finalData);
//4.监听服务器返回的数据
xhr.onreadystatechange = function () {
if (xhr.status==200 && xhr.readyState==4){
var result = null;
//获取返回的数据类型
var rType = xhr.getResponseHeader("Content-Type");
if (rType.indexOf('xml')!=-1){
result = xhr.responseXML;
}else if(rType.indexOf('json')!=-1){
// JSON.parse 的意思是 将 json格式的字符串
//比如 [{ "src":"./images/nav0.png","content":"商品分类1"}]
//转成js对象
result = JSON.parse(xhr.responseText);
}else{//当成普通的字符串去处理
result = xhr.responseText;
}
//将这里解析好的数据交给页面去渲染
success(result);
}
}
}

jQuery中使用ajaxAPI jQuery ajax

jQuery为我们提供了更便利的ajax封装使用.

$.ajax({}) 可以配置方式发起ajax请求
$.get() 以get方式发起ajax请求
$.post() 以post方式发起ajax请求
$('form').serialize() 序列化表单(格式化key=val$key=val)

参数说明

url :接口地址
type :请求方式(get/post)
timeout : 要求为Number类型的参数,设置请求超时时间(毫秒)
dataType: 应该是客户端传递给服务器一个值,告诉服务器如何进行处理:
data: 发送请求数据
beforeSend: 要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求.
success: 成功响应后调用
error: 错误响应时调用
complete: 响应完成时调用(包括成功和失败)

//ajax===get
$.ajax({
url:'',
data:'key=value&key=value',
type:'get',
success:function (result) {
console.log(result);
}
});
//ajax===post
$.ajax({
url:'',
data:'key=value&key=value',
type:'post',
success:function (result) {
console.log(result);
}
});
//$.get
$.get({
url:'',
data:'key=value&key=value',
success:function (result) {
console.log(result);
}
});
//$.post
$.post({
url:'',
data:'key=value&key=value',
success:function (result) {
console.log(result);
}
});
//在使用jQuery中ajax发送请求的时候,只需要在 dataType中写上jsonp即可实现ajax的跨域请求
dataType:'jsonp'

跨域

通过XHR实现ajax通信的一个主要限制(相同域,相同端口,相同协议),来源于跨服安全策略,默认情况下,XHR只能请求同一域的资源,这是为了防止某些恶意的行为.

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Ajax基础与登入教程

    Ajax基础与登入教程

    2017-04-06 16:04

  • jquery的方法 jQuery jQuery教程 jQuery代码 jquery的方法

    jquery的方法 jQuery jQuery教程 jQuery代码 jquery的方法

    2017-01-17 12:01

  • AJAX实例 Ajax Ajax请求 Ajax教程 AJAX实例

    AJAX实例 Ajax Ajax请求 Ajax教程 AJAX实例

    2017-01-07 17:00

  • Ajax+smarty技术实现无刷新分页

    Ajax+smarty技术实现无刷新分页

    2016-03-15 15:00

网友点评
r