IE8和IE9跨域请求“拒绝访问”

页面中偶尔会有跨域的需求,之前使用过jsonp格式的,但是这次后端提供了可以跨域访问的接口。
接口表现如下:
1、在谷歌浏览器和火狐浏览器上正常
2、在IE10及以上浏览器上正常
3、在IE9和IE8浏览器上请求发送了,但是后端接口接收不到请求记录,在【网络】面板上也查询不到接口发送记录

在IE9和IE8浏览器上经过打断点调试,发现是请求send()之后,立马被浏览器抛出异常“拒绝访问”

function _http(_url, _method, _data, _async, _success, _err) {try {// 1.创建XMLHttpRequest对象var xhr = null;xhr = new XMLHttpRequest();// 2.打开与服务器的链接xhr.open(_method, _url, _async);// 设置请求头参数格式xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=UTF-8");// 3.响应就绪xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {var response = JSON.parse(xhr.responseText);_success && _success(response )} else {_err && _err(e)}}};// 4.发送给服务器xhr.send(_data)} catch (e) {// 捕获异常console.log(e)_err && _err(e)}
}


看来在IE8和IE9上使用XMLHttpRequest发送跨域请求是有问题的。
在MDN上搜索了一下,官方文档上描述IE8和IE9发送跨域请求使用XDomainRequest,IE10及以上可以直接使用XMLHttpRequest
XDomainRequestMDN链接如下
微软官网的XDomainRequestMDN使用文章
微软XDomainRequest文章的翻译

以下是该方法的使用方法
// 创建跨域请求对象
var xdr = new XDomainRequest()
xdr对象含有的方法如下

XDomainRequest原型链上的方法如下

// 设置超时时间
xdr.timeout = 5000

//请求报头Content-Type,可以设置,但是获取的时候始终为""
xdr.contentType

// 读取超时时间
xdr.timeout

// 超时事件
xdr.ontimeout = function () {};

// 请求异常事件
xdr.onload = function () {};

// 请求完成事件
xdr.onload = function () {};

// 请求进度事件
xdr.onprogress = function () {};

//接口的响应数据(只读,虽然可以设置,但是设置的值不生效)
xdr.responseText

// 与服务器建立连接,只支持get 和 post 请求,XDomainRequest为异步请求,不支持设置同步还是异步
// http的页面只能使用http接口,https页面只能使用https接口
xdr.open(method, url);

// 发送请求,为避免两个请求相隔时间太近没有响应,使用setTimeout 执行
setTimeout(function () {
xdr.send(_data);
}, 0);

// 中断请求
xdr.abort();

function _xdrhttp(_url, _method, _data, _success, _err) {try {// 创建跨域请求对象var xdr = new XDomainRequest(), timer = null;// 设置超时时间为5sxdr.timeout = 5000xdr.ontimeout = function() {xdrError('操作失败,请求超时。')};xdr.onerror = function(e) {xdrError('操作失败,请安装驱动程序后重试。')};xdr.onload = function() {var response = JSON.parse(xdr.responseText);_success && _success(response);}// 2.打开与服务器的链接xdr.open(_method, _url);setTimeout(function() {// 发送请求xdr.send(_data);}, 0);} catch (e) {xdrError('操作失败,请安装驱动程序后重试。')}// 统一的错误处理方法function xdrError(msg) {_err && _err({status: 500,message: msg,ret: 'fail'});}
}

使用XDomainRequest发送请求返回结果

问题解决,皆大欢喜

在附一个已经封装好的 jQuery-ajaxTransport-XDomainRequest 插件链接
我近期打算在发一篇【IE开发者工具】使用技巧,要是有猿友也有使用技巧或者IE其他bug调试愿意分享的可以私信我

IE8和IE9发送跨域请求相关推荐

  1. Vue(八)发送跨域请求

    使用vue-resource发送跨域请求 axios不支持跨域 1 安装vue-resource并引入 cnpm install vue-resource -S 2 基本用法 使用this.$http ...

  2. Vue-cli3.x中使用Axios发送跨域请求的配置方法

    Vue-cli3.x中使用Axios发送跨域请求的配置方法 安装axios npm i axios -s main.js中引入 import axios from 'axios'//将axios挂载在 ...

  3. Chrome 96 版本无法发送跨域请求的问题 解决方案

    前言 我之前那个篇文章 Chrome 96版本无法携带cookie问题的解决方案 解决的问题是 因为跨域导致的无法携带cookie 的问题,而不是 跨域 问题,因为网上现有的解决方案可以通过配置chr ...

  4. ajax技术发送跨域请求时设置携带cookie信息

    在使用ajax技术发送跨域请求时,默认情况下不会在请求中携带cookie信息,如s1网站的客户端向s1服务器端发送数据请求时设置 xhr.withCredentials = true 默认为false ...

  5. java学习笔记——众筹项目练习——前台系统的实名认证功能、ajax发送跨域请求、后台manager系统的实名认证人工审核

                                                     实名认证功能 前面的文章中我们实现了后台manager系统中的流程管理功能,并且将实名认证的流程上传到 ...

  6. 原生jsonp发送跨域请求

    回到文章总目录 同源策略 当前打开的浏览器的url和当前页面ajax请求的url一样才叫同源 协议,端口,域名三者一样满足同源策略 使用jsonp解决跨域 script标签本身具备跨域特性,当我直接打 ...

  7. 利用Access-Control-Allow-Origin响应头解决跨域请求

    标签:cors 跨域请求 ACAO 2015-11-28 18:53 12103人阅读 评论(0) 收藏 举报  分类: web前端(5)  J2EE服务器(2)  传统的跨域请求没有好的解决方案,无 ...

  8. AJAX请求和跨域请求详解(原生JS、Jquery)

    一.概述 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX = 异步 JavaScript 和 XML,是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数 ...

  9. laravel php跨域请求,laravel开发中跨域的解决方案

    前言 众所周知我们大家在用 laravel 进行开发的时候,特别是前后端完全分离的时候,由于前端项目运行在自己机器的指定端口(也可能是其他人的机器) , 例如 localhost:8000 , 而 l ...

最新文章

  1. Verilog设计实例(6)基于Verilog的各种移位寄存器实现
  2. java bufferarray_如何使用Java的ByteBuffer.arrayOffset()方法
  3. optee中断处理的介绍(概念篇)
  4. Spring实战 MethodInvokingJobDetailFactoryBean使用与分析
  5. vim 编程常用的指令和快捷键
  6. 前端工程化开发方案app-proto
  7. MaxCompute预付费资源监控工具-CU管家使用教程
  8. Python基础-2 专用下划线标识符
  9. 基于linux的智能小车_商汤首款原创机器人SenseRover X自动驾驶小车斩获Red Dot Award...
  10. 百度编辑器 ueditor .net开发
  11. 5款Windows 界面原型设计工具
  12. 颜色的前世今生4·孟塞尔色空间
  13. 安装mentohust 64位
  14. $(...).dataTable is not a function
  15. linux桌面只运行浏览器,分享|4 个 Linux 桌面上的轻量级图像浏览器
  16. 【转载】目前市场上主流的BI产品主要有哪些?
  17. 【Altium designer】常用的线宽和过孔尺寸
  18. threejs fire 火焰与烟雾效果
  19. 有趣的二进制算法小魔术
  20. pms酒店管理系统功能,酒店管理系统软件开发

热门文章

  1. linux下查看cpu峰值,linux下查看CPU信息
  2. ROS系统安装Kinetic(零基础教程)
  3. IDC销售是什么?难在哪里?
  4. 麻省理工学院的学生们愚弄了谷歌图像识别技术,计算机视觉算法仍然很容易被骗
  5. 【渝粤教育】电大中专新媒体营销实务 作业 题库
  6. 手把手教你肢解钓鱼网站
  7. 【总线】一文看懂 UART 通信协议
  8. 2019国赛C题优秀论文机场的出租车问题
  9. 《数字经济》远光软件毕伟:数字化协同创新
  10. [Cue]emulator unknown skin name 'WVGA800'