没有调用Blueimp fileupload()回调

hen*_*oem 1 file-upload blueimp jquery-file-upload

我正在使用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");
        });
Run Code Online (Sandbox Code Playgroud)

但是,done永远不会调用回调.我尝试绑定fileuploadfinished,也从未调用过.

start并且progress都按预期调用.

beforeSend没有文档,但django-tastypie需要SessionAuthentication- 删除它不会改变它done,fileuploadfinished也永远不会被调用.

hen*_*oem 5

事实证明,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");
            }
        },
    });
Run Code Online (Sandbox Code Playgroud)

这意味着,complete回调被调用是成功还是失败,并且检查readyStatestatus一起可以判断它是否成功.

还有其他一些方法可以让它发挥作用,但我认为这是最好的.更多细节在这里:

数据插入成功但jquery仍然返回错误