关于php:与FormData中的文件调用ajax错误404(找不到)

Error 404 (not found) in ajax call with file inside FormData

我试图调用一个PHP脚本通过Ajax上传一个文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var fd = new FormData();
fd.append('file', file);
console.log(file);

var xhr = $.ajax({
  url: 'https://www.mywebsite.com/it/file/upload/',
  type: 'POST',
  dataType: 'json',
  data: fd,
  cache: false,
  contentType: false,
  processData: false,

  success: function(result, message, xhr)
  {
    console.log(result);
  }
});

目前,PHP脚本只显示接收到的文件数据

1
2
3
header('Content-Type: application/json');
echo json_encode($_FILES['file']);
die();

传递给Ajax数据的"file"对象如下

1
File {errors: 0, name:"wedding.jpg", lastModified: 1500572565619, lastModifiedDate: Thu Jul 20 2017 19:42:45 GMT+0200 (ora legale Europa occidentale), webkitRelativePath:""}

但是当调用Ajax调用时,在Inspect窗口中我得到以下错误

1
jquery.min.js:4 POST https://www.mywebsite.com/it/file/upload/ 404 (Not Found)

这听起来很奇怪,因为当我直接浏览脚本路径时,它没有给出任何404响应。如果我评论"contenttype"参数,错误就会消失,但是从php脚本收到的响应是null。我错过了什么?


您需要将内容类型指定为预期的类型。正如你在文章中提到的,php文件

1
 header('Content-Type: application/json');

所以,试着改变它

1
 contentType: false,

1
 contentType:"application/json; charset=utf-8",