IE 11 错误 - 访问被拒绝 - XMLHttpRequest

Posted

技术标签:

【中文标题】IE 11 错误 - 访问被拒绝 - XMLHttpRequest【英文标题】:IE 11 error - Access is denied - XMLHttpRequest 【发布时间】:2015-01-09 14:08:21 【问题描述】:

我在使用 IE11 和 ajax 时遇到了一个特殊错误。对于我使用下面的代码发出的几乎所有请求,一切都很好,但是当我尝试与复制+粘贴方法结合使用时,它返回一个访问被拒绝错误。总结一下

此代码在大多数浏览器中都能正常运行,适用于我编写的所有功能 在 IE 11 + Windows 8.1 中,它在大多数情况下都能正常工作,除非运行特定的复制和粘贴功能 有趣的是,当使用 IE 11,但使用不同的文档模式(例如 8)时,我仍然遇到相同的错误,即使它在 IE8 + Windows 7 中本机运行也是如此 错误是“访问被拒绝”

这里是 AJAX 代码:

function ajaxRequest(requestName,responseFunction,parameters) 
 var xmlhttp;
 if (requestName.length==0) return;
 if (window.XMLHttpRequest)  
     xmlhttp=new XMLHttpRequest();
  else 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
 
 xmlhttp.onreadystatechange=function() 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
        if(xmlhttp.responseText == 'Error') alert('Error processing request. Please refresh the page and try again');
        else if(xmlhttp.responseText != '') eval(responseFunction+"('"+xmlhttp.responseText+"')");
     
 
 var now = new Date();
 var url = "control/ajax.php?request="+requestName+"&parameters="+parameters+"&timestamp"+now;
 xmlhttp.open("GET",url,true);
 xmlhttp.send();

一个失败的例子,设置了以下变量:

请求名称:“save_marksheet_mark” 响应函数:“update_save_marksheet_mark” 参数:[60962,1284,5]

这段代码有问题吗?在特定情况下,IE11 是否会在此代码中引发错误?

【问题讨论】:

参考本帖***.com/questions/22098259/… 这不是跨域请求 - var url = "control/ajax.php... 它请求的页面与用户已经访问过的站点相同 “但是,当我尝试与复制+粘贴方法结合使用时,它返回访问被拒绝错误” 您是否尝试自行复制粘贴以查看是否这就是“拒绝访问”错误的来源?尽可能消除不必要的代码。 这是我最初的想法,但错误显然出现在 xmlhttp.open 行(在开发人员工具中突出显示) - 当我将其注释掉(以及 xmlhttp.send)时,有没有错误。 尝试将xmlhttp.open("GET",url,true) 行放在xmlhttp.onreadstatchange 声明上方。 【参考方案1】:

这个问题似乎得到了很多关注,所以以防万一有人想知道,我通过在原始 AJAX 调用上使用 setTimeout() 解决了这个问题。例如:

setTimeout(function() 
        ajaxRequest('save_mark','save_mark_completed',[60962,1284,5]) 
    , 1);

我假设这是 IE 中的某种错误。只需 1 毫秒!

【讨论】:

这太荒谬了,我非常感谢你发布这个解释,因为在弄清楚到底发生了什么之前,我会挣扎很长时间。 1ms 超时如何解决问题?这样请求就成功了? 我不能告诉你为什么它有效,但它确实有效!我想这只是一个错误!【参考方案2】:
setTimeout(function() 
        ajaxRequest('save_mark','save_mark_completed',[60962,1284,5]) 
    , 1);

这对我在页面加载后的第一次调用确实有效,但后来的调用再次开始显示访问被拒绝错误

【讨论】:

以上是关于IE 11 错误 - 访问被拒绝 - XMLHttpRequest的主要内容,如果未能解决你的问题,请参考以下文章

当ajax目标是localhost时,IE 10和11中的访问被拒绝

在 Angularjs 中的 IE10+ 中访问被拒绝 CORs 请求,需要跨源资源共享错误(信息?)

在 IE8 上获取访问被拒绝错误

当 ajax 目标是 localhost 时,IE 10 和 11 中的访问被拒绝

防止 IE 中出现“SCRIPT5:访问被拒绝”错误

尝试访问以编程方式创建的 <iframe> 的文档对象时出现“访问被拒绝”JavaScript 错误(仅限 IE)