gpt4 book ai didi

javascript - 为什么这个 XMLHTTPRequest 在到达服务器之前就被中止了?

转载 作者:行者123 更新时间:2023-11-28 08:40:38 24 4
gpt4 key购买 nike

我维护一个使用 CKeditor 的网络应用程序与 simogeo Filemanager 结合使用。在某些时候(不幸的是,我不确定什么时候)文件上传功能停止工作。这不是服务器代码问题(至少不是直接问题),因为 XHR 请求永远不会发送到服务器。但除此之外,该问题很难诊断,因为当请求失败时,我无法从浏览器获取太多信息。

<小时/>

为了简化调试,我使用此处的 AJAX 文件上传示例的修改版本:https://github.com/New-Bamboo/example-ajax-upload

<?php
if ( isset( $_FILES['our-file'] ) ) {
echo 'You uploaded ' . $_FILES['our-file']['name'];
exit();
}
?>

<!--
https://github.com/New-Bamboo/example-ajax-upload
-->

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Ajax upload form</title>
</head>
<body>

<form action="index.php" method="post" enctype="multipart/form-data" id="form-id">

<p><input id="file-id" type="file" name="our-file" />
<input type="submit" value="Submit" /></p>

<script>
var form = document.getElementById('form-id');
form.onsubmit = function() {
var formData = new FormData(form);
var action = form.getAttribute('action');
sendXHRequest(formData, action);
return false;
}

function sendXHRequest(formData, uri) {
try {
var xhr = new XMLHttpRequest();
xhr.addEventListener('readystatechange', evtXHR , false);
xhr.addEventListener('timeout', evtXHR , false);
xhr.addEventListener('error', evtXHR , false);
xhr.open('POST', uri, true);
xhr.timeout = 3000;
xhr.send(formData);
} catch (err) {
result.innerHTML = err;
}
}

function evtXHR (evt) {
var status = null;

try {
status = evt.target.status;
}
catch(e) {
return;
}

var result = document.getElementById('result');
var msg = result.innerHTML + '<hr>';
if (status == '200' && evt.target.responseText) {
msg += '<p>Results from the server:</p><pre>' + evt.target.responseText + '</pre>';
}
msg += '<p>XMLHTTPRequest Event ' + evt.type + '<br>';
msg += 'XMLHTTPRequest Status ' + evt.target.status + '<br>';
msg += 'XMLHTTPRequest Readystate ' + evt.target.readyState + '</p>';
result.innerHTML = msg;
}
</script>

<pre id="result"></pre>

</form>
</body>
</html>

表单提交(xhr.send())后,请求终止,没有任何有用的错误。 Firefox 终止该请求并指示它已中止(来自 Firebug 网络面板)。 IE 同样终止该请求,并在控制台中显示以下错误:

XMLHttpRequest: Network Error 0x2efe, Could not complete the operation due to error 00002efe.

谷歌搜索几乎没有提供任何方向。几种可能的解释是 too many requests , overlapping requests cancelling each other out ,或请求超时。这些似乎都不相关。 Mozilla 有一个 note about stopped requests这似乎可能有帮助,但与我的问题没有直接关系。

仅当使用包含文件的 POST 请求通过 AJAX 提交时,才会出现此问题。提交常规的非 AJAX 请求效果很好。在没有文件的情况下提交 AJAX 请求效果很好。提交 GET 请求是可行的,但这严重限制了数据大小。将请求提交到 HTML 文档而不是 PHP 脚本似乎可以解决该问题。

在具有非常相似配置的服务器上,我无法重复该问题。但是,我使用两个不同的域在同一台服务器上重现了该问题。并且该问题可能会在使用各种浏览器的两台不同客户端计算机上重复出现。

所以...现在怎么办?寻找答案或至少寻找如何调试问题的建议。

您可以在这里找到简单的上传脚本:http://flora.p2061.org/fileup

最佳答案

帖子在聊天中作为服务器端问题解决 - 可耻地重新启动 apache 清除了问题:/但对于任何感兴趣的人 transcript is available here 。对于任何有类似问题的人来说,可能(或没有)有用的对话。

关于javascript - 为什么这个 XMLHTTPRequest 在到达服务器之前就被中止了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20534603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com