1

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

怎么了?

4

2 回答 2

5

看起来好像您对$.postand$.ajax方法感到困惑,因为您传入了一个单独的json参数(它$.ajax不接受作为 dataType 参数)。

此外,您真的不应该将 设置contentTypefalse您正在设置processDatafalse,这对于 Pyramid 与 jQuery 对这种组合的影响有什么关系会造成非常混乱的组合。

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

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

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

于 2012-12-08T08:39:09.087 回答
-1

对于文件上传,请使用 JQuery .upload 插件。有关更多详细信息,请查看https://github.com/blueimp/jQuery-File-Upload/wiki/Basic-plugin

于 2012-12-08T03:15:42.017 回答