我使用以下代码上传了Ajax文件:
$('#photo-input:file').change(function() {
var photo = this.files[0];
var caption = $('.photo-caption').val();
type = photo.type;
if (photo.type != 'image/png' && photo.type != 'image/jpg' && !photo.type != 'image/gif' && photo.type != 'image/jpeg' ) {
alert('Sorry, you may only upload png, jpg, jpeg, or gif images.');
return false;
}
$('.photo-post-submit').click(function () {
var formData = new FormData();
formData.append('photo', photo);
$.ajax({
url: '/post',
type: 'POST',
data: {'photo' : formData, 'caption' : caption},
cache: false,
contentType: false,
processData: false,
success: function () {
}
}, 'json');
});
});
但是,当我致电request.POST['caption']
或request.POST['photo']
时,我收到了错误消息:
Not an HTML form submission (Content-Type: application/xml)
出了什么问题?
答案 0 :(得分:5)
看起来您在$.post
和$.ajax
方法之间感到困惑,因为您传递了一个单独的json
参数($.ajax
不接受一个dataType参数)。
此外,你真的不应该将contentType
设置为false
,将和设置为processData
到false
,令人困惑的混合是什么金字塔将与jQuery组成的任何组合。
要将cache
参数设置为false
的POST服务器,请使用:
$.ajax({
url: '/post',
type: 'POST',
data: {'photo' : formData, 'caption' : caption},
cache: false,
dataType: 'json',
success: function () {
}
});
请注意,dataType
设置为json
,这意味着您的Pyramid视图需要返回 JSON,jQuery AJAX代码需要JSON响应。
答案 1 :(得分:-1)
对于文件上传,请使用JQuery .upload插件。 有关详情,请查看https://github.com/blueimp/jQuery-File-Upload/wiki/Basic-plugin。