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

別の引数 ( dataType 引数として受け入れない)を渡しているため、$.post$.ajaxメソッドの間で混乱しているように見えます。json$.ajax

さらに、 を に設定するべきではなく、に設定しているためcontentType、その組み合わせで jQuery が作成するものと Pyramid が何をしなければならないかについて、非常に混乱を招きます。falseprocessDatafalse

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 に答える