原生JS实现Ajax请求
前言:作为前端开发,向后端发起请求这是必不可少的一个步骤,通过请求,后端返回给我们相应的数据,根据数据我们做出相应的操作。一般来说,现在很多前端开发者发起请求时都是采用第三方库来实现,比如axios、jQuery库等等。
一.利用jQuery实现ajax方法
采用jQuery封装好的ajax方法发起请求很简单,代码就简单如下就可以了。
$.ajax({url: ,type: '',dataType: '',data: {},success: function(){},error: function(){}})
我们只需要填入相应的参数属性就可以了。
二.利用原生JavaScript实现ajax请求
原生JS中,我们主要是利用一个叫做XMLHttpRequest的对象进行后台与服务端数据的交换,具体代码可参考如下:
var Ajax={get: function(url, fn) {// XMLHttpRequest对象用于在后台与服务器交换数据 var xhr = new XMLHttpRequest(); xhr.open('GET', url, true);xhr.onreadystatechange = function() {// readyState == 4说明请求已完成if (xhr.readyState == 4 && xhr.status == 200 || xhr.status == 304) { // 从服务器获得数据 fn.call(this, xhr.responseText); }};xhr.send();},// datat应为'a=a1&b=b1'这种字符串格式,在jq里如果data为对象会自动将对象转成这种字符串格式
post: function (url, data, fn) {var xhr = new XMLHttpRequest();xhr.open("POST", url, true);// 添加http头,发送信息至服务器时内容编码类型xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function() {if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) {fn.call(this, xhr.responseText);}};xhr.send(data);}
}
注释:
1. open(method, url, async) 方法需要三个参数:
**method:**发送请求所使用的方法(GET或POST);与POST相比,GET更简单也更快,并且在大部分情况下都能用;然而,在以下情况中,请使用POST请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
**url:**规定服务器端脚本的 URL(该文件可以是任何类型的文件,比如 .txt 和 .xml,或者服务器脚本文件,比如 .asp 和 .php (在传回响应之前,能够在服务器上执行任务));
**async:**规定应当对请求进行异步(true)或同步(false)处理;true是在等待服务器响应时执行其他脚本,当响应就绪后对响应进行处理;false是等待服务器响应再执行。
2. send() 方法可将请求送往服务器。
3. onreadystatechange:存有处理服务器响应的函数,每当 readyState 改变时,onreadystatechange 函数就会被执行。
4. readyState:存有服务器响应的状态信息。(更加具体的状态码信息可自行百度)
0: 请求未初始化(代理被创建,但尚未调用 open() 方法)
1: 服务器连接已建立(open方法已经被调用)
2: 请求已接收(send方法已经被调用,并且头部和状态已经可获得)
3: 请求处理中(下载中,responseText 属性已经包含部分数据)
4: 请求已完成,且响应已就绪(下载操作已完成)
5. responseText:获得字符串形式的响应数据。
6. setRequestHeader():POST传数据时,用来添加 HTTP 头,然后send(data),注意data格式;GET发送信息时直接加参数到url上就可以,比如url?a=a1&b=b1。
示例:
var uri = 自己的API//创建XMLHTTPRequest对象var req = new XMLHttpRequest();//使用open方法设置和服务器的交互信息,参数一是请求的类型,//参数二是请求的url, 可以带参数, 动态的传递参数starName到服务端 参数三是规定应当对请求进行异步(true)或同步(false)处理req.open("get", uri, false);//设置HTTP请求头部req.setRequestHeader("Accept", "application/json");req.setRequestHeader("Content-Type", "application/json; charset=utf-8");req.setRequestHeader("OData-MaxVersion", "4.0");req.setRequestHeader("OData-Version", "4.0");//注册事件 onreadystatechange 状态改变就会调用req.onreadystatechange = function () {if (this.readyState == 4) {if (this.status == 200) {var data = JSON.parse(this.responseText);if (data.value.length > 0) {//获取信息state = data.value[0].字段;show = true;} else {show = false;}}}};//发送请求req.send();
进行封装处理:
this.executeWebAPI = function (requestType, requestUri, requestData, successCallback, errorCallback, isAsync) {var req = new XMLHttpRequest();if (isAsync == null) {isAsync = true;}req.open(requestType, encodeURI(requestUri), isAsync);req.setRequestHeader("Accept", "application/json");req.setRequestHeader("Content-Type", "application/json; charset=utf-8");req.setRequestHeader("OData-MaxVersion", "4.0");req.setRequestHeader("OData-Version", "4.0");req.setRequestHeader("Prefer", "odata.include-annotations=*");req.onreadystatechange = function () {if (this.readyState == 4 /* complete */) {req.onreadystatechange = null;if (this.status == 200) {if (successCallback) {successCallback(JSON.parse(this.responseText));}}else if (this.status == 204) {if (successCallback) {successCallback(this.getResponseHeader("OData-EntityId"));}}else {var error = JSON.parse(this.response).error;if (errorCallback) { errorCallback(error); }else { Xrm.Utility.alertDialog(error.message); }}}};req.send(JSON.stringify(requestData));}
调用:
executeWebAPI("GET", //请求方式uri, //请求路径null, //携带的参数function (data) { //响应成功alert(data)},function (data) { //响应失败alert(data.message);}, false); //是否异步请求
原生JS实现Ajax请求相关推荐
- js原生ajax跨域请求,封装一个原生js的ajax请求,支持IE9CORS跨域请求
前言 关于纯js的ajax请求,我之前有文章写过, https://www.haorooms.com/post/js_ajax_chun , 关于CORS跨域资源共享,我也有文章写过, https:/ ...
- 原生ajax如何跨域,封装一个原生js的ajax请求,支持IE9CORS跨域请求
前言 关于纯js的ajax请求,我之前有文章写过,https://www.haorooms.com/post/js_ajax_chun, 关于CORS跨域资源共享,我也有文章写过,https://ww ...
- 原生js的ajax请求
什么是ajax ajax的出现,刚好解决了传统方法的缺陷.AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个 ...
- 原生JS写Ajax的请求函数
本文主要介绍了如何通过原生JavaScript封装ajax请求,文中给出了具体的实现代码和详细的解释,希望对你有所帮助. 一.JS原生Ajax ajax:一种请求数据的方式,不需要刷新整个页面: aj ...
- php上js实现ajax请求,原生JS如何实现Ajax通过POST方式与PHP进行交互的方法
原生JS如何实现Ajax通过POST方式与PHP进行交互的方法 发布时间:2021-04-20 11:28:22 来源:亿速云 阅读:52 作者:小新 这篇文章将为大家详细讲解有关原生JS如何实现Aj ...
- 原声ajax发送post请求,原生JS实现ajax 发送post请求
1. [代码]原生JS实现ajax 发送post请求 var oStr = ''; var postData = {}; var oAjax = null; //post提交的数据 postData ...
- 原生js实现Ajax,JSONP
Ajax内部的几个执行步骤 创建XMLHttpRequest对象(new XMLHttpRequest()) 设置请求头(setRequestHeader) 连接服务器(open()) 设置回调(on ...
- 使用原生js写ajax
// 使用原生js 封装ajax // 兼容xhr对象 function createXHR(){if(typeof XMLHttpRequest != "undefined"){ ...
- Ajax工作原理和原生JS的ajax封装
前言: 之所以用ajax作为博客的开篇,是因为无论从ajax的出现还是从它的作用上来说,ajax对于前端无疑是意义重大的.甚至可以说,是ajax带来了前端这个行业.当然,历史并不能说明当下,曾经的辉煌 ...
- java原生的ajax怎么写,用原生js实现 ajax方法
原标题:用原生js实现 ajax方法 作者介绍:咔拉宝宝前端工程师,致力于首个情景式购物商城咔拉商城的前端搭建,在咔拉职场栏目作为程序猿担当,与读者朋友们共同探讨前端开发的那些事. 一.ajax介绍: ...
最新文章
- TokuDB介绍——本质是分形树(一个叶子4MB)+缓存减少写操作
- python是不是特别垃圾-【转】python是垃圾吗?
- Kubernetes容器上下文环境
- Python解决中文乱码问题
- [奇葩 bug]视图在 ipad5 上正常显示,在 iPad3上超出了边界
- Oracle DBA课程系列笔记(5)
- strus2拦截器中获取客户端ip
- 计算机网络 第三章 数据链路层
- .htaccess 基础教程(四)Apache RewriteCond 规则参数
- mysql 刷新二进制日志_mysql binglog 二进制日志文件
- 阶段3 2.Spring_07.银行转账案例_1 今日课程内容介绍
- SQL Server常用查询指令
- Java 项目经典代码
- Ubuntu下QQTIM安装
- 四、登录注册页功能实现《iVX低代码/无代码个人博客制作》
- ap音频测试仪软件,美国进口音频分析仪/AP音频测试仪/电声测试仪
- maven命令指定配置文件
- 华为转正答辩ppt范文_华为转正答辩ppt模板下载-精选版.ppt
- R数据分析:随机截距交叉滞后RI-CLPM与传统交叉滞后CLPM
- P2P 之 UDP穿透NAT的原理与实现(附源代码)
热门文章
- perl脚本 linux,linux – 通过Perl脚本设置环境变量
- 主流GPS方案供应商大盘点
- 洛谷 P2525 Uim的情人节礼物·其之壱
- 单片机 c语言 可控硅,以单片机控制为核心的晶闸管触发装置简单设计方案
- 弹性力学第五版pdf_弹性力学txt-弹性力学pdf-谁知我电子书
- 模板引擎 Velocity语法
- 加油吧!数字化转型@网络电视台拿了个“云第一”
- 格式工厂 wav 比特率_智能音乐格式转换
- sun java认证真题,sun scjp考试心得_java认证
- dreamweaver序列号免费_dreamweaver8【dreamweaver8序列号】dreamweaver8注册码序列号简体中文版...