是什么导致页面被取消?我有一个Chrome开发者工具的屏幕截图。
这种情况经常发生,但并非每次都发生。似乎一旦缓存了其他一些资源,页面刷新将加载LeftPane.aspx。真正奇怪的是,这仅发生在Google Chrome中,而不是Internet Explorer 8中。为什么Chrome会取消请求?
是什么导致页面被取消?我有一个Chrome开发者工具的屏幕截图。
这种情况经常发生,但并非每次都发生。似乎一旦缓存了其他一些资源,页面刷新将加载LeftPane.aspx。真正奇怪的是,这仅发生在Google Chrome中,而不是Internet Explorer 8中。为什么Chrome会取消请求?
Answers:
我们遇到了类似的问题,即Chrome取消了在框架或iframe中加载内容的请求,但只是间歇性的,它似乎取决于计算机和/或互联网的连接速度。
这些信息已经过了几个月,但是我从头开始构建Chromium,从源头开始挖掘,找到可以取消请求的所有位置,并在所有这些位置设置断点以进行调试。从内存来看,Chrome唯一可以取消请求的地方:
在我们的案例中,我们最终将其追溯到一个框架,试图将HTML附加到另一框架,有时这是在目标框架加载之前发生的。触摸iframe的内容后,它就无法再将资源加载到其中(它将如何知道将其放置在哪里?),因此它将取消请求。
document.write
该框架的所有,并确保它们仅在框架加载时才写入。由于您回答了该状态的含义,因此我将其标记为正确的答案。
true
变量的框架中创建一个onLoad处理程序,然后其他框架在触摸任何内容之前先查找该变量。
在JavaScript事件上的ajax请求上也可能发生status = canceled状态:
<script>
$("#call_ajax").on("click", function(event){
$.ajax({
...
});
});
</script>
<button id="call_ajax">call</button>
该事件成功发送了请求,但随后被取消(但由服务器处理)。原因是,无论您是否在同一单击事件上发出任何ajax请求,元素都将在单击事件上提交表单。
为了防止请求被取消,JavaScript event.preventDefault(); 必须称为:
<script>
$("#call_ajax").on("click", function(event){
event.preventDefault();
$.ajax({
...
});
});
</script>
ng-click
在按钮上使用了angular的按钮,type="submit"
然后在被调用的函数中进行了一些联网。Chrome浏览器不断取消该请求...
注意:请确保您没有任何包装表单元素。
我遇到了类似的问题,将带有onclick = {}的按钮包装在一个表单元素中。当点击按钮时,表单也被提交,这一切都搞砸了...
这个答案可能永远不会被任何人阅读,但是我想出了为什么不写它:)
@click
事件绑定到<button>
表单包装器中的元素。除非您正在使用Vue的@submit.prevent
事件修饰符,否则请避免这样做。
type="button"
在我的按钮标签中添加,就不会提交表单,从而避免了取消事件。
需要注意的另一件事可能是AdBlock扩展或一般的扩展。
但是“很多”人拥有AdBlock。
要排除扩展,请在隐身模式下打开一个新标签,以确保要测试的扩展范围的“隐身模式允许关闭”。
您可能要检查“ X-Frame-Options”标题标签。如果将其设置为SAMEORIGIN或DENY,则Chrome(和其他浏览器)将根据规格取消插入iFrame。
另外,请注意,某些浏览器支持ALLOW-FROM设置,但Chrome不支持。
要解决此问题,您将需要删除“ X-Frame-Options”标题标签。这可能使您容易遭受点击劫持攻击,因此您需要确定风险是什么以及如何减轻风险。
这是我发生的事情:服务器为302重定向返回了格式错误的“位置”标头。当然,Chrome无法告诉我这一点。我在firefox中打开页面,并立即发现了问题。很高兴拥有多个工具:)
#{}
插值,因此生成的URL格式错误。但是Chrome没有告诉我任何有关它的信息。
我们遇到(canceled)
状态的另一个地方是特定的TLS证书配置错误。如果网站https://www.example.com
配置错误,例如证书不包含,www.
但证书有效https://example.com
,则chrome将取消此请求并自动重定向到后者。这不是对Firefox的情况。
当前有效的示例:https : //www.pthree.org/
在iframe中不同域上的安全页面和非安全页面之间重定向时,发生了取消的请求。重定向的请求在开发工具中显示为“已取消”请求。
我有一个包含iframe的页面,其中包含由我的付款网关托管的表单。提交iframe中的表单后,付款网关将重定向回我服务器上的URL。重定向最近停止工作,最终变为“已取消”请求。
Chrome(我使用的是Windows 7 Chrome 30.0.1599.101)似乎不再允许iframe中的重定向转到单独域上的非安全页面。要解决此问题,我只是确保将iframe中的所有重定向请求始终发送到安全网址。
当我创建一个仅包含iframe的简单测试页时,控制台中出现了警告(我以前错过了它,或者可能没有出现):
[Blocked] The page at https://mydomain.com/Payment/EnterDetails ran insecure content from http://mydomain.com/Payment/Success
在PC,Mac和Android上的Chrome中,重定向已变为已取消的请求。我不知道它是否特定于我的网站设置(SagePay低配置文件)或Chrome中的某些更改。
就我而言,我有一个点击事件主播,例如
<a href="" onclick="somemethod($index, hour, $event)">
在内部点击事件中,我进行了一些网络通话,Chrome取消了该请求。锚点具有href
with ""
手段,它将重新加载页面,同时发生具有取消的网络调用的click事件。每当我href
用空之类的替换
<a href="javascript:void(0)" onclick="somemethod($index, hour, $event)">
问题消失了!
如果您使用了一些基于可观察的HTTP请求(例如Angular(2+)内置的HTTP请求),则可以取消取消可观察的HTTP请求(使用RxJS 6 switchMap
运算符组合流时很常见) 。在大多数情况下mergeMap
,如果您想完成请求,则只需使用operator 就足够了。
我们有这样一个问题<button>
,即表单中有标签,该标签应该从js发送ajax请求。但是,由于浏览器的缘故,该请求被取消,该请求会在每次点击后自动发送表格button
在表单内的表单。
因此,如果您确实要使用button
而不是常规页面,div
或者span
要在页面上发送表单抛出js,则应使用以下方法设置侦听器:preventDefault
功能。
例如
$('button').on('click', function(e){
e.preventDefault();
//do ajax
$.ajax({
...
});
})
打电话给我时,我也是如此。带$的js文件。ajax,并发出ajax请求,我所做的通常是正常的。
就我而言,显示电子邮件客户端窗口的代码导致Chrome停止加载图像:
document.location.href = mailToLink;
将其移动到$(window).load(function(){...})而不是$(function(){...})帮助。
当我遗漏return false时,这可以帮助我遇到被取消状态的任何人;在表格中提交。这导致ajax发送后紧接着是提交操作,该操作覆盖了当前页面。代码如下所示,重要的return末尾为false。
$('form').submit(function() {
$.validator.unobtrusive.parse($('form'));
var data = $('form').serialize();
data.__RequestVerificationToken = $('input[name=__RequestVerificationToken]').val();
if ($('form').valid()) {
$.ajax({
url: this.action,
type: 'POST',
data: data,
success: submitSuccess,
fail: submitFailed
});
}
return false; //needed to stop default form submit action
});
希望能对某人有所帮助。
对我来说,“取消”状态是因为文件不存在。奇怪为什么铬不显示404
。
原因之一可能是在代码中的某处调用了XMLHttpRequest.abort(),在这种情况下,请求的cancelled
状态将在Chrome开发者工具的“网络”标签中显示。
更新记录时,我遇到了同样的问题。在save()内部,我正在准备从表单中获取的原始数据以匹配数据库格式(对枚举值进行大量映射等),并且这会间歇性地取消放置请求。我通过从save()中准备数据并从中创建专用的dataPrep()方法来解决该问题。我将此dataPrep转换为异步并等待所有内存密集型数据转换。然后,我将准备好的数据返回到可以在http put客户端中使用的save()方法。我确保在调用put方法之前在dataPrep()上等待:
await dataToUpdate =等待dataPrep(); http.put(apiUrl,dataToUpdate);
这样解决了请求的间歇取消。
如果您使用axios,它可以为您提供帮助
// change timeout delay:
instance.defaults.timeout = 2500;
net::ERR_ABORTED
在掩盖之下。在这种情况下,此帖子说明“ net :: ERR_ABORTED仅在用户操作导致加载中断时生成。当新导航中断现有导航或用户单击STOP时,可能会发生这种情况。按钮。”