javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】


Posted in Javascript onDecember 15, 2016

本文实例讲述了javascript和 jQuery中的AJAX技术。分享给大家供大家参考,具体如下:

1.什么是AJAX?

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面。

2.AJAX在原生JS中的实现

尽管随着JS框架的盛行,在jQuery中,实现AJAX过程相当简单,但是对于一些不需要加载jQuery这种庞大插件的项目中,还是要采用AJAX的原生实现!

要实现原生JS的AJAX过程,对于高版本浏览器,支持JS中的XMLHttpRequest对象,而低版本的浏览器IE6,IE7不兼容,因此要使用ActiveXObject()对象来实现,兼容各种版本的XMLHttpRequest对象的构建如下:

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

对于XMLHttpRequest对象有很多种方法,

(1)xml.readyState:表示请求的状态其中xml.readyState=0表示请求的准备阶段,xml.readyState=1,表示开始发送请求,xml.readyState=2表示服务器已经接收到请求,xml.readyState=3表示服务器正在处理请求,xml.readyState=4表示服务器处理完请求,并将请求返回到客户端。

0 - (未初始化)还没有调用send()方法
1 - (载入)已调用send()方法,正在发送请求
2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调用了

(2)xml.status:表示请求过程中的状态说明,

1xx信息提示:

这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。

2XX表示成功,

3XX重定向

客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。

4xx客户端错误

发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。

5XX服务器错误

服务器由于遇到错误而不能完成该请求。

(3)用原生JS,实现AJAX中的get请求:

var xml=new XMLhttpRequest();
xml.onreadystatechange=function(){
 if(xml.readyState==4&&xml.status==200)
 {
   var data=JSON.parse(xml.responseText);
  }
  else{
   alert("请求失败");
  }
}
xml.open("get","url","true");//url里面为请求的地址,true表示异步请求
xml.send(null)

(4) 用原生JS实现post请求:

var xml=new XMLhttpRequest();
xml.onreadystatechange=function(){
 if(xml.readyState==4&&xml.status==200)
 {
   var data=JSON.parse(xml.responseText);
 }
 else{
   alert("请求失败");
 }
}
xml.open("post","url","true");//url里面为请求的地址,true表示异步请求
xml.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //设置post请求的请求头
xml.send(null)

为什么要设置请求头信息:

默认情况下,Ajax以content-type:text/plain,方式来提交数据,此时服务器将忽略post实体部分的数据,所以服务器无法获得post请求中的数据。

解决方法:

Content-Type: application/x-www-form-urlencoded

3.AJAX中的跨域技术

(1).跨域的方式有首先是代理访问。<script></script>这个方法可以跨域访问JS等文件,比如说

<script src="www.abc.com/de.php?callback=dosomething"</script>

就像引入JS一样,但是不同的是,JSONP方法跨域需要服务器端语言的配合。

(2).只能用于GET方法的jsonp方法,进行跨域比如我们有

datatype:jsonp
    jsonp:callback

然后加上后台处理即可!~

(3).利用XHR2方法,在后台进行操作从而实现跨域支持IE9以上比如 header("Access-Control-Allow-Origin:*");header("Access-Control-Allow-methods:POST,GET");即可实现跨域,并且我们会有在*里面的是允许跨域的地址来源!~

(4).document.domain来跨域

document.domain在需要进行跨域的iframe中,加上相同的document.domain,xxx.com

4.下面主要介绍JSONP和CORS跨域访问解决办法

(1)首先对于JSONP跨域:因为AJAX本身是不能跨域的,有同源保护策略,但是带有src的标签可以跨域

比如<script>和<img>等标签,可以实现跨域请求,这里主要介绍jQuery中JSONP方法的跨域实现:

JSONP的实现思路:

1.前端创建script标记,设置src,添加到head中(你可以往body中添加)

2.后台返回一个js变量jsonp,这个jsonp就是请求后的JSON数据

3.回调完成后删除script标记(还有一些清理工作如避免部分浏览器内存泄露等)

$.ajax({
 type : "get",
 async:false,
 url : "ajax.ashx",
 dataType : "jsonp",
 jsonp: "callbackparam",//传递给请求处理程序或页面的
 jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称
 success : function(json){
 alert(json);
 alert(json[0].name);
 },
})

(2)CORS跨域方法

CORS定义一种跨域访问的机制,可以让AJAX实现跨域访问,CORS允许一个域上的网络应用向另一个域提交跨域访问请求,实现此功能非常简单,只需要由服务器发送一个相应请求即可!比如在PHP中可以写成:

header("Access-Control-Allow-Origin:*");
header("Access-Control-Allow-methods:POST,GET")

在XHR2方法中实现,并且对于IE,只支持IE9以上浏览器

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript高级程序设计 读书笔记之八 Function类及闭包
Feb 27 Javascript
jquery实现tr元素的上下移动示例代码
Dec 20 Javascript
JS将制定内容复制到剪切板示例代码
Feb 11 Javascript
Jquery中$.post和$.ajax的用法小结
Apr 28 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
Mar 13 Javascript
webpack项目调试以及独立打包配置文件的方法
Feb 28 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
Jul 03 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
Dec 05 Javascript
ES6知识点整理之对象解构赋值应用示例
Apr 17 Javascript
解决layer 动态加载select 失效的问题
Sep 18 Javascript
laydate只显示时分 不显示秒的功能实现方法
Sep 28 Javascript
vue实现五子棋游戏
May 28 Javascript
JavaScript常见的五种数组去重的方式
Dec 15 #Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Dec 15 #Javascript
手机软键盘弹出时影响布局的解决方法
Dec 15 #Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Dec 15 #Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
Dec 15 #Javascript
JavaScript实现Fly Bird小游戏
Dec 15 #Javascript
JS中对数组元素进行增删改移的方法总结
Dec 15 #Javascript
You might like
一个php作的文本留言本的例子(五)
2006/10/09 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
jQuery 获取URL参数的插件
2010/03/04 Javascript
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
Python新手学习标准库模块命名
2020/05/29 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
工业学校毕业生自荐书
2014/01/03 职场文书
周年庆促销方案
2014/03/15 职场文书
网站客服岗位职责
2014/04/05 职场文书
优秀护士事迹材料
2014/12/25 职场文书
大学生村官个人总结
2015/02/15 职场文书
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
go goroutine 怎样进行错误处理
2021/07/16 Golang