Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在转到服务器之前中止此XMLHTTPRequest?_Javascript_Php_Jquery_Ajax_Debugging - Fatal编程技术网

Javascript 为什么在转到服务器之前中止此XMLHTTPRequest?

Javascript 为什么在转到服务器之前中止此XMLHTTPRequest?,javascript,php,jquery,ajax,debugging,Javascript,Php,Jquery,Ajax,Debugging,我维护了一个web应用程序,该应用程序与一起使用。在某个时候(不幸的是,我不确定何时),文件上传功能停止工作。这不是服务器代码问题(至少不是直接问题),因为XHR请求从未发送到服务器。不过,除此之外,这个问题很难诊断,因为当请求失败时,我无法从浏览器中获取太多信息 为了简化调试,我使用了修改后的AJAX文件上载示例,如下所示: Ajax上传表单 var form=document.getElementById('form-id'); form.onsubmit=函数(){ var for

我维护了一个web应用程序,该应用程序与一起使用。在某个时候(不幸的是,我不确定何时),文件上传功能停止工作。这不是服务器代码问题(至少不是直接问题),因为XHR请求从未发送到服务器。不过,除此之外,这个问题很难诊断,因为当请求失败时,我无法从浏览器中获取太多信息


为了简化调试,我使用了修改后的AJAX文件上载示例,如下所示:


Ajax上传表单

var form=document.getElementById('form-id'); form.onsubmit=函数(){ var formData=新formData(表格); var action=form.getAttribute('action'); 发送请求(表单数据、操作); 返回false; } 函数sendXHRequest(formData,uri){ 试一试{ 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); }捕捉(错误){ result.innerHTML=err; } } 函数evtXHR(evt){ var状态=空; 试一试{ 状态=evt.target.status; } 捕获(e){ 返回; } var result=document.getElementById('result'); var msg=result.innerHTML+“
”; 如果(状态='200'&&evt.target.responseText){ msg+='来自服务器的结果:

'+evt.target.responseText+''; } msg+='XMLHTTPRequest事件'+evt.type+'
'; msg+=“XMLHTTPRequest Status”+evt.target.Status+”
; msg+=“XMLHTTPRequest Readystate”+evt.target.Readystate+”

; result.innerHTML=msg; }
表单提交(
xhr.send()
)后,请求将终止,不会出现任何有用的错误。Firefox会终止请求并表示请求已被中止(从Firebug网络面板)。IE同样会在控制台中以以下错误终止请求:

XMLHttpRequest:网络错误0x2efe,由于错误00002efe,无法完成操作

谷歌在方向上几乎没有提供什么帮助。少数可能的解释是,或请求超时。这些似乎都不相关。Mozilla有一个可能有用的解决方案,但与我的问题没有直接关系

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

在配置非常相似的服务器上,我无法复制该问题。然而,我在同一台服务器上使用两个不同的域复制了这个问题。这个问题可以在两台使用不同浏览器的不同客户端计算机上复制

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


您可以在这里找到简单的上传脚本:

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

您能发布AJAX代码吗?所有代码都打包到Filemanager包中。我只是设置了一些配置选项,它们在两个系统之间是相同的。我知道您可能已经搜索了答案。你看过这个吗?我做到了(有一次我找到了AJAX配置对象的设置位置)。它导致Firefox抛出一个JS错误:
TypeError:b为null
。另外,需要注意的是,只有在上传文件时才会出现这种情况。普通表单数据通过AJAX发布很好。重启吗?在linux中?哦拿着我的键盘,我再也配不上它了。
<?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>