使用Pyramid处理ajax文件上传服务器端

时间:2012-12-08 02:37:47

标签: jquery python ajax pyramid

我使用以下代码上传了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)

出了什么问题?

2 个答案:

答案 0 :(得分:5)

看起来您在$.post$.ajax方法之间感到困惑,因为您传递了一个单独的json参数($.ajax不接受一个dataType参数)。

此外,你真的不应该将contentType设置为false,将设置为processDatafalse,令人困惑的混合是什么金字塔将与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