原生js如何实现ajax请求和JSONP跨域请求

  介绍

小编给大家分享一下原生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跨域请求