Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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 Can';t通过ajax发送文件(打印($\文件);数组())_Javascript_Php_Ajax_Post - Fatal编程技术网

Javascript Can';t通过ajax发送文件(打印($\文件);数组())

Javascript Can';t通过ajax发送文件(打印($\文件);数组()),javascript,php,ajax,post,Javascript,Php,Ajax,Post,我正在尝试发送文件,它可以与通用表单确认一起使用,但不能与XHR一起使用。 这里是我的HTML: <form action="ajax/upload.php" method="post" name="form1" enctype="multipart/form-data" id="id1"> <input type="file" name="input1"> <input type="submit" name="submit1"> </form&

我正在尝试发送文件,它可以与通用表单确认一起使用,但不能与XHR一起使用。
这里是我的HTML:

<form action="ajax/upload.php" method="post" name="form1" enctype="multipart/form-data" id="id1">
  <input type="file" name="input1">
  <input type="submit" name="submit1">
</form>  

<form action="ajax/upload.php"  method="post" name="form2" id="id2">
  <input type="file" name="input2">
  <input type="submit" name="submit2">
</form>
PHP:

echo '<pre>';
var_dump($_REQUEST);
echo 'print_r($_FILES); <br>';
echo 'Result: <br><br>';
print_r($_FILES);
print "</pre>";
对于AJAX:

document.querySelector('#id2 input[type="file"]').files[0]
File { name: "CRC75.otf", lastModified: 1529516347000, webkitRelativePath: "", size: 411456, type: "application/vnd.oasis.opendocument.formula-template" }  
我不明白为什么,附件存在:

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en;q=0.5
Connection: keep-alive
Content-Length: 411456
Content-Type: multipart/form-data; boundary=44316423440108066
Host: localhost
Referer: http://localhost/
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linu…) Gecko/20100101 Firefox/61.0  
AJAX请求的头看起来很正常

document.querySelector('#id2').onsubmit = function(e) {
    e.preventDefault();
    var formdata = new FormData;
    var file = document.querySelector('#id2 input[type="file"]').files[0];
    formdata.append("input2", file);
    formdata.append("submit2", "Отправить запрос");
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "ajax/upload.php", true);
    xhr.send(formdata);
}  

注意:这是我不能发送
POST
请求的要求。

您不能在
send()参数中直接发送
文件
,您需要使用
FormData
对象


不要使用
xhr.setRequestHeader()
来设置
内容类型
标题。这是由浏览器自动完成的。如果您自己这样做,指定的边界将与实际发送的边界不匹配。

结果仍然相同
var file=document.querySelector('#id2 input[type=“file”]')。files[0];var formData=new formData();formData.append('File',File);xhr.send(formData)你想问什么?我发送了FormData对象,但它仍然像以前一样响应。
document.querySelector('#id2 input[type="file"]').files[0]
File { name: "CRC75.otf", lastModified: 1529516347000, webkitRelativePath: "", size: 411456, type: "application/vnd.oasis.opendocument.formula-template" }  
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en;q=0.5
Connection: keep-alive
Content-Length: 411456
Content-Type: multipart/form-data; boundary=44316423440108066
Host: localhost
Referer: http://localhost/
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linu…) Gecko/20100101 Firefox/61.0  
document.querySelector('#id2').onsubmit = function(e) {
    e.preventDefault();
    var formdata = new FormData;
    var file = document.querySelector('#id2 input[type="file"]').files[0];
    formdata.append("input2", file);
    formdata.append("submit2", "Отправить запрос");
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "ajax/upload.php", true);
    xhr.send(formdata);
}