我正在尝试通过Ajax上传文件。
var fd = new FormData();
fd.append('file', file);
var xhr = $.ajax({
url: 'https://www.mywebsite.com/it/file/upload/',
type: 'POST',
dataType: 'json',
data: fd,
cache: false,
contentType: "application/json; charset=utf-8"
processData: false,
success: function(result, message, xhr)
{
console.log(result);
}
});
目前,上传PHP脚本只显示文件数据
header('Content-Type: application/json');
echo json_encode($_FILES['file']);
die();
如上所述here,我被迫使用contentType:"application/json; charset=utf-8"
因为contentType:false
导致404 (Not Found)
错误。
不幸的是,此解决方案避免了404错误,但显示的文件数据为null
。
答案 0 :(得分:0)
你应该使用它。它对我有用。
$.ajax({
type: 'POST',
url: $(this).attr('action'), //url_to_php_script
data: new FormData(this),
contentType: false,
processData: false,
success: function (data) {
//do necessary cleanups on success
},
error: function (e) {
//do necessary cleanups on failue
}
});
您可以使用$_FILES
答案 1 :(得分:0)
你应该按照自己的方式行事,但是......
如果将contentType
设置为false,则强制jquery不为您设置内容类型。如果没有设置,它将默认为`application / x-www-form-urlencoded;字符集= UTF-8'
这意味着您使用网址编码字符串发送数据。 您无法轻松地以网址编码字符串发送文件。
很可能服务器端的方法设置为从URL读取表单参数。因此,如果你设置`contentType'为假,服务器不会识别网址,导致404。
尝试设置服务器方法以接受帖子数据,删除网址参数并从$_POST
和$_FILES
变量中阅读发布的表单。
如果您无法解决问题,请使用服务器更新问题'方法,以便我们可以看到该方法是如何设置的。