ajax
1.什么是ajax?
AJAX是再一种无需重新加载整个页面的情况下,也能够更新网页部分的技术(局部刷新)AJAX是一个异步的代码,再程序中同步异步的区别就是,同步代码按照顺序执行,异步代码不按照顺序执行。
2.ajax的优点?
页面无刷新更新数据:ajax最大的优点就是能够在不刷新网页的情况下与服务器通信维护数据;异步与服务器通信:ajax使用异步方式与服务器通信 ,不需要打断用户的操作,具有更加迅速的响应能力;前端和后端负载平衡:ajax可以把以前一些服务端负担的工作转嫁到客户端,减轻服务器和带宽的负担,节约空间和宽带租用成本;基于标准被广泛支持:ajax基本标准化的并被广泛支持的技术,不需要下载浏览器插件;界面与应用分离:ajax使WEB中的数据与呈现分离,有利于分工合作,提高效率。
3.ajax的缺点
ajax干掉了Back和History功能:即对浏览器机制的破坏,在动态页面的情况下,用户无法回到前面一个页面状态;ajax有安全问题:ajax技术给用户带来了很好的用户体验的同时也带来了新的安全威胁,ajax技术就如同对企业数据建立了一个直接的通道;对搜索引擎支持较弱:对搜索引擎优化不太好;破坏程序的异常处理机制:像Ajax。dll,Ajaxpro.dll这些Ajax框架是会破坏程序的异常机制;AJAX不能很好支持移动端设备;
4.如何使用ajax
主流W3C标准浏览器都支持XMLHttpRequest对象
低版本IE浏览器使用的是 ActiveXObject
4.1.创建ajax对象
var xhr
= new XMLHttpRequest();
if(window
.XMLHttpRequest
){
var xhr
=new XMLHttpRequest();
}else{
var xhr
=new ActiveXObject("Microsoft.XMLHTTP");
};
4.2.初始化ajax请求
xhr
.open(method
,url
,async);
method
:请求数据类型
get/post
url:文件在服务器上的位置
async: 可选,默认ture(异步),
false(同步)
4.3发送请求
xhr
.send(param
);
param
:对于
get请求,参数为
null
param:对于post请求,参数为发送到服务器的数据
xhr
.setRequestHeader("Content-type","application/x-www-form-urlencoded")
1.语义化不一样
GET倾向于从服务器获取数据
post倾向于从服务器提交数据
2.传递参数的方式
GET请求直接在地址栏后边拼接
post请求在请求体里面传递
3.参数大小限制
GET请求一般理论上不大于
2KB
post请求理论上没有上线
4.缓存能力
GET会被浏览器主动缓存
POST不会被浏览器主动缓存
5.安全性能
GET请求相对安全性较低
POST请求相对安全性较高
get/post本质上都是tcp连接
4.4请求-响应状态
0:请求未初始化
1:服务器连接已经建立
2:请求已经接收
3:请求处理中
4:请求已经完成
200:请求成功
301:网页被重定向到其他的url
304:文件未被修改,使用缓存资源
404:找不到此网页(指定的资源
)
500:服务器内部错误
xhr
.onreadystatechange=function (){
if (xhr
.readyState
==4) {
if (xhr
.status
==200) {
alert( xhr
.responseText
);
} else{
alert( xhr
.status
);
};
};
}
5.封装ajax
5.1封装ajax
function ajax(options
){
1.创建XMLHttpRequest对象
var xhr
= new XMLHttpRequest();
var data
= "";
if(typeof options
.data
=== "string"){
data
= options
.data
;
}
if(typeof options
.data
=== "object" && options
.data
!==null && options
.data
.constructor
=== Object
){
for(var key
in options
.data
){
data
+= key
+"="+options
.data
[key
]+"&";
}
data
= data
.substring(0,data
.length
-1)
}
if(options
.type
.toLowerCase()==='get'){
2.初始化一个请求
xhr
.open(options
.type
,options
.url
+"?"+data
+"&_="+Date
.now())
3.发送一个请求
xhr
.send()
}else if (options
.type
.toLowerCase()==='post'){
2.初始化一个请求
xhr
.open(options
.type
,options
.url
)
xhr
.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
3.发送一个请求
xhr
.send(data
)
}els
{
alert('目前只支持 get和post 请求!')
}
4.请求
-响应状态
xhr
.onreadystatechange = function () {
if (xhr
.readyState
== 4) {
if (xhr
.status
>= 200 && xhr
.status
< 300) {
options
.success(xhr
.responseText
)
} else {
options
.error(xhr
.status
)
}
}
}
}
options:是一个参数对象
options
={
type
:"GET/POST",
url:
,
data
:{
},
success:
function(){
}
error:
function(){
}
}
5.2.使用Promise封装ajax
function promiseAjax(options
){
return new Promise(function(resolve
,reject
){
var xhr
= new XMLHttpRequest();
var data
= '';
if (typeof options
.data
=== 'string'){
data
= options
.data
;
}
if (typeof options
.data
=== 'object' && options
.data
!== null && options
.data
.constructor
=== Object
){
for (var key
in options
.data
){
data
+= key
+'='+options
.data
[key
]+'&';
}
data
= data
.substring(0,data
.length
-1);
}
if (options
.method
.toLowerCase() === 'get'){
xhr
.open(options
.method
,options
.url
+'?'+data
+'&_='+Date
.now(),true);
xhr
.send(null);
} else if (options
.method
.toLowerCase() === 'post'){
xhr
.open(options
.method
,options
.url
,true);
xhr
.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr
.send(data
);
} else {
alert('目前只支持 get和post 请求!')
}
xhr
.onreadystatechange = function (){
if (xhr
.readyState
== 4){
if(xhr
.status
>= 200 && xhr
.status
< 300){
resolve(xhr
.responseText
);
} else{
reject(xhr
.status
);
}
}
}
});
}
5.3.jQuery ajax
$.ajax( options ) 通过 HTTP 请求加载远程数据
url:请求的url地址 type:请求类型(get/post…) cache:是否读取缓存,默认true data:要发送给服务器的数据,示例:"name=jack&age=19"string或Object{name:“jack”,age:“19”} async:默认true,为异步请求 dataType:服务器返回的数据类型特殊的格式JQ会进行预解析和兼容性修复。可选择的值:“xml” , “html” , “script” , “json” , “text”,”jsonp”等 timeout:设置超时(毫秒) success:请求成功的回调函数 error:请求失败的回调函数 complete:请求完成后的回调函数,无论成功与失败 beforeSend:发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义 HTTP头。在beforeSend中如果返回false可以取消本次ajax请求。XMLHttpRequest对象是惟一的参数。
$('#login').click(function (){
$
.ajax({
type
:'get',
url
:'test.php',
dataType
:'json',
cache
:false,
success
:function (json
){
$('h1').html(json
.name
+json
.sex
+json
.age
);
},
error
:function (){
alert('请求失败');
}
});
})
!!! 以上是DaXiong本人对前端知识的理解总结,如内容知识有错误可以留言修改。
!!!如果以上内容帮助到了你,点击一下赞或者收藏吧!