Jquery 使用金字塔处理ajax文件上传服务器端

Jquery 使用金字塔处理ajax文件上传服务器端,jquery,python,ajax,pyramid,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' &am

我上传了一个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)

出什么问题了?

要上传文件,请使用JQuery.upload插件。
有关更多详细信息,请查看。

有关文件上载,请使用JQuery.upload插件。
有关更多详细信息,请检查。

您似乎混淆了
$.post
$.ajax
方法,因为您要传递一个单独的
json
参数(该参数
$.ajax
不接受为数据类型参数)

此外,您真的不应该将
contentType
设置为
false
,您正在将
processData
设置为
false
,这就造成了一个非常混乱的混合,即金字塔将与jQuery对该组合的任何处理有何关系

要将
缓存
参数设置为
后发到服务器,请使用:

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

请注意,
dataType
设置为
json
,这意味着您的金字塔视图需要返回json,jQuery AJAX代码需要一个json响应。

看起来您对
$.post
$.AJAX
方法感到困惑,因为您传递的是一个单独的
json
参数(其中,
$.ajax
不接受作为数据类型参数)

此外,您真的不应该将
contentType
设置为
false
,您正在将
processData
设置为
false
,这就造成了一个非常混乱的混合,即金字塔将与jQuery对该组合的任何处理有何关系

要将
缓存
参数设置为
后发到服务器,请使用:

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

请注意,
dataType
设置为
json
,这意味着您的金字塔视图需要返回json,jQuery AJAX代码需要json响应。

啊,我明白了。这立即解决了问题。谢谢!啊,我明白了。这立即解决了问题。谢谢!