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 函数调用规则
Aug 26 Javascript
js压缩工具 yuicompressor 使用教程
Mar 31 Javascript
javascript处理table表格的代码
Dec 06 Javascript
基于JQuery实现相同内容合并单元格的代码
Jan 12 Javascript
使用jquery解析XML示例代码
Sep 05 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
Apr 28 Javascript
js弹性势能动画之抛物线运动实例详解
Jul 27 Javascript
原生javascript实现的全屏滚动功能示例
Sep 19 Javascript
详解PHP后期静态绑定分析与应用
Mar 21 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
May 06 Javascript
JS中实现一个下载进度条及播放进度条的代码
Jun 10 Javascript
react中的DOM操作实现
Jun 30 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数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
laravel-admin的图片删除实例
2019/09/30 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
Angularjs按需查询实例代码
2017/10/30 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Python中enumerate函数代码解析
2017/10/31 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
python解析含有重复key的json方法
2019/01/22 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
Python 寻找局部最高点的实现
2019/12/05 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
高级方案规划工程师岗位职责
2013/11/29 职场文书
高一新生军训感言
2014/03/02 职场文书
法律专业自荐信
2014/06/03 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS