1

Blueimp fileupload() を使用して、画像ファイルを django-tastypie API に投稿しています。

以下のコードは、ファイルがアップロードされている限り正しく機能します。

        $("#image").fileupload({
            dataType: 'json',
            start: function() {
                console.log("start fileupload");
            },
            progress: function(e, data) {
                console.log(data.loaded + " " + data.total);
            },
            beforeSend: function(xhr, settings) {
                xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
            },
            done: function(e, data) {
                console.log("done uploading file.");
            }                   
        });

        $("#image").bind('fileuploadfinished', function (e, data) {
            console.log("fileuploadfinished");
        });

ただし、doneコールバックは呼び出されません。and をバインドしてみましたfileuploadfinishedが、これも呼び出されません。

start両方ともprogress期待どおりに呼び出されます。

beforeSendは文書化されていませんが、django-tastypie で必要とされていますSessionAuthentication- 削除してもそれは変わらず、呼び出されることもdoneありませんfileuploadfinished

4

2 に答える 2

6

結局のところ、django-tastypie は 201 ステータス コードを正しく返します。ただし、このステータス コードは fileupload による成功とは見なされません。

このコードは、ステータス コードを手動で処理します。

    $("#image").fileupload({
        dataType: 'json',
        beforeSend: function(xhr, settings) {
            xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
        },
        complete: function(xhr) {
            if (xhr.readyState == 4) {
                if (xhr.status == 201) {
                    console.log("Created");
                }
            } else {
                console.log("NoGood");
            }
        },
    });

つまり、completeコールバックは成功したか失敗したかに関係なく呼び出され、readyStateと をstatus一緒にチェックすることで、成功したかどうかがわかります。

これを機能させる方法は他にもいくつかありますが、これが最善だと思います。詳細はこちら:

データは正常に挿入されましたが、jquery は引き続きエラーを返します

于 2013-09-22T09:09:49.607 に答える