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

Wiz*_*Wiz 1 python ajax jquery 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');
                });

            });
Run Code Online (Sandbox Code Playgroud)

但是当我打电话request.POST['caption']或者request.POST['photo']我收到错误时:

Not an HTML form submission (Content-Type: application/xml)
Run Code Online (Sandbox Code Playgroud)

出了什么问题?

Mar*_*ers 5

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

此外,你真的不应该设置contentTypefalse,要设置processDatafalse,闹了一个非常混乱的组合,以什么金字塔将有什么jQuery让该组合做.

要将cache参数设置为的POST发送到服务器false,请使用:

$.ajax({
    url: '/post',
    type: 'POST',
    data: {'photo' : formData, 'caption' : caption},
    cache: false,
    dataType: 'json',
    success: function () {
    }
});
Run Code Online (Sandbox Code Playgroud)

请注意,dataType设置为json,这意味着您的Pyramid视图需要返回 JSON,jQuery AJAX代码需要JSON响应.