介绍
小编给大家分享一下原生js如何实现ajax请求和JSONP跨域请求,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
直接上代码:
const ajax =, (params =,{}),=祝辞,{ ,const nowJson =, params.jsonp ?, jsonp (params),:, json (params); ,function jsonp (params) {//才能创建脚本标签并加入到页面中 var 才能;callbackName =, params.jsonp; var 才能;head =, document.getElementsByTagName(& # 39;头# 39;)[0];//才能,设置传递给后台的回调参数名 params.data才能[& # 39;调# 39;],=,callbackName; var 才能;data =, formatParams (params.data); var 才能;script =, document.createElement(& # 39;脚本# 39;); head.appendChild才能(脚本); , 窗口才能[callbackName],=,函数(jsonData), { ,,head.removeChild(脚本); ,,clearTimeout (script.timer); ,,窗口[callbackName],=,空; ,,params.success ,,, params.success (jsonData); ,,};//console.log才能(窗口(callbackName))//console.log才能(params.url +, & # 39; ? & # 39;, +,数据) ,//url才能形式传参//说才能明:下面的脚本加载资源后会返回一个自执行函数:[callbackName] (responseData)中,这个形式就是去执行一个函数,函数的名字是一个参数//,,,,,,,,同时在窗口对象上定义了这个函数:[callbackName],=,函数(responseData)中{},这时就会调用这个函数 script.src 才能=,params.url +, & # 39; ? & # 39;, +,数据; ,//为才能了得知此次请求是否成功,设置超时处理 如果才能(params.time), { ,,script.timer =, setTimeout(函数(),{ ,,,窗口[callbackName],=,空; ,,,head.removeChild(脚本); ,,,params.error ,,, params.error ({ ,,,,的信息:,& # 39;超时& # 39; ,,,}); ,,,},params.time); ,,} ,} ,//格式化参数 ,function formatParams(数据),{ var 才能;arr =, []; ,,(var name 拷贝数据),{ ,,arr.push (encodeURIComponent(名字),+,& # 39;=& # 39;,+,encodeURIComponent(数据[名字])); ,,}; ,//,才能添加一个随机数,防止缓存 arr.push才能(& # 39;v=& # 39;, +,随机()); return 才能;arr.join (& # 39;, & # 39;); ,} , ,//获取随机数 ,function 随机(),{ return 才能;Math.floor (math . random (), *, 10000, +, 500); ,} ,function json (params), {//才能,请求方式,默认是得到的 params.type 才能=,(params.type | |, & # 39;得到# 39;).toUpperCase ();//才能,避免有特殊字符,必须格式化传输数据 时间=params.data 才能;formatParams (params.data); var 才能;xhr =,空; ,//,才能实例化XMLHttpRequest对象 如果才能(window.XMLHttpRequest), { ,,xhr =, new XMLHttpRequest (); ,,},{else ,,//,IE6及其以下版本 ,,xhr =, new ActiveXObjcet (& # 39; Microsoft.XMLHTTP& # 39;); ,,}; ,//才能,监听事件,只要,readyState 的值变化,就会调用,readystatechange 事件 xhr.onreadystatechange 才能=,()函数,{ ,,//,判别属性表示请求/响应过程的当前活动阶段,4为完成,已经接收到全部响应数据 ,,如果(==xhr.readyState 4), { ,,,var status =, xhr.status; ,,,//,状态:响应的HTTP状态码,以2开头的都是成功 ,,,如果(status 祝辞=,200,,,,status & lt;, 300), { ,,,,var response =, & # 39; & # 39;; ,,,,//,判断接受数据的内容类型 ,,,,var type =, xhr.getResponseHeader(& # 39;内容类型# 39;); ,,,,如果(type.indexOf (& # 39; xml # 39;), !==, 1,,,, xhr.responseXML), { ,,,,,response =, xhr.responseXML;,//文档对象响应 ,,,,},else 如果(type ===, & # 39; application/json # 39;), { ,,,,,response =, JSON.parse (xhr.responseText);,//JSON响应 ,,,,},{else ,,,,,response =, xhr.responseText;,//字符串响应 ,,,,}; ,,,,//,成功回调函数 ,,,,params.success ,,, params.success(响应); ,,,},{else ,,,,params.error ,,, params.error(状态); ,,,} ,,}; ,,}; ,//才能,连接和传输数据 null null null null null null null null null null null null null null null null null null null null null null null null null原生js如何实现ajax请求和JSONP跨域请求