分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

原生Ajax-封装Ajax

发布时间:2023-09-06 02:13责任编辑:白小东关键词:Ajax

一、XMLHTTPRequest

  Ajax技术核心是XMLHTTPRequest对象(简称XHR),是由微软首先引入的一个特性,其他浏览器提供商后来都提供了相同的实现。在XHR出现之前,Ajax式的通信必须借助一些手段来实现,大多数是使用隐藏的框架或内嵌框架。

  Ajax,是Asynchronout JavaScript+XML的简写。这种技术能够向服务器请求额外的数据而无需卸载/刷新页面,会带来更好的用户体验。

  1、支持原生XHR对象的浏览器创建XHR对象可以直接实例化XMLHTTPRequest。

    

  

  2、在使用XHR对象时,先必须调用open()方法,它接收三个参数:要发送的请求类型(get/post)、请求的URL和表示是否异步(async)。open()方法并不会真正发送请求,而只是启动一个请求以备发送。

  3、通过send()方法进行发送请求,send()方法接受一个参数,作为请求主体发送的数据。如果不需要必须填null。执行send()方法后请求就会发送到服务器上。

  4、请求发送到服务端收到响应后,响应的数据会自动填充XHR对象的属性,一共有四个属性:

    

  5、接受响应之后,第一步检查status属性,以确定响应已经成功返回,有如下的状态代码:

    

  

  6、判断http状态值以确定响应是否成功返回

    

  7、当使用异步调用的时候,检测readyState属性,每当readyState属性改变时,触发readyStatechange事件。这个属性共有五个值:

    

    

 二、GET与POST

  1、GET请求

    通过URL后的问号给服务器传递键值对数据,服务器接收到返回响应数据。特殊字符传参产生的问题可以使用encodeURIComponent()进行编码处理,中文字符的返回及传参,可以将页面保存和设置为utf-8即可,AJAX返回的数据为UTF-8。

  2、POST请求

    通过发送POST请求的数据,不会跟在URL后面,而是通过send()方法向服务器提交数据

      

    向服务器发送POST请求由于解析机制的原因,需要进行特别的处理。因为POST请求和Web表单提交是不同的的,需要使用XHR来模仿表单提交。

      

    从性能上来讲POST请求比GET请求消耗更多一些,用相同数据比较,GET请求最多比POST请求快两倍

三、封装Ajax

  

<script type="text/javascript">var obj={ ???url:"user", ???method:"post", ???data:{name:"zs",age:18}, ???async:true, ???success:function(result){ ???????console.log(result); ???????console.log(JSON.parse(result)) ???}, ???error:function(result){ ???????console.log(result); ???}}ajax(obj)function ajax(obj){ ???//得到XMLHTTPRequest对象 ???var xhr=new XMLHttpRequest(); ???//将参数格式化 ???obj.data=params(obj.data); ???//判断请求方式 ???if(obj.method.toUpperCase()=="GET"){ ???????obj.url+=(obj.url.indexOf("?")==-1)?"?"+obj.data:"&"+obj.data; ???????//open()方法:请求方式/请求路径/是否异步 ???????xhr.open(obj.method,obj.url,obj.async); ???????//发送请求 ???????xhr.send(null); ???}else{ // POST请求 ???????xhr.open(obj.method,obj.url,obj.async); ???????//模拟表单提交 ???????xhr.setRequestHeader("Content-Type","application/x-www-form-urlencode"); ???????//发送请求 ???????xhr.send(obj.data); ???} ???//判断是否是异步请求 ???if(obj.async){ //异步请求 ???????//判断响应是否完全响应 ???????xhr.onreadystatechange=function(){ ???????????if(xhr.readyState==4){ ???????????????callback(); ???????????} ???????} ???}else{ ???????callback(); ???} ???????//回调函数 ???function callback(){ ???????if(xhr.status==200){ ???????????//回调函数 ???????????obj.success(xhr.responseText); ???????}else{ ???????????obj.error("请求失败!错误状态码"+xhr.status+",错误原因"+xhr.statusText); ???????} ???}}/** * 将json格式的字符串转换成普通的参数拼接 */function params(data){ ???var arr=[]; ???if(data!=null && data !=""){ ???????for(var d in data){ ???????????console.log(d+" "+data[d]); ???????????var name=encodeURIComponent(d); ???????????var value=encodeURIComponent(data[d]); ???????????????????????arr.push(name+"="+value); ???????} ???????var param=arr.join("&"); ???????return param; ???} ???return null;}</script>

   同步:

    提交请求-->等待服务器处理-->处理完毕返回这个期间客户端浏览器不能干的事,当前只能做一件事。

  异步:

    请求通过事件触发-->服务器处理(这时浏览器仍然可以做其他事情)-->处理完毕。可以同时做多件事情

四、JQuery封装的AJax

  $.ajax(){}

  $.get(){}

  $.getJson(){}

  $.post(){}

原生Ajax-封装Ajax

原文地址:https://www.cnblogs.com/dhome/p/9589565.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved