没有调用Blueimp fileupload()回调

时间:2013-09-16 10:01:54

标签: file-upload jquery-file-upload blueimp

我正在使用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回调。我尝试绑定fileuploadfinished,但也从未调用过。

startprogress都按预期调用。

beforeSend没有记录,但django-tastypie需要SessionAuthentication - 删除它不会改变done并且永远不会调用fileuploadfinished

2 个答案:

答案 0 :(得分: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");
            }
        },
    });

这意味着,调用complete回调是成功还是失败,并且同时检查readyStatestatus可以判断它是否成功。

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

Data inserted successful but jquery still returning error

答案 1 :(得分:2)

我遇到了同样的问题。这是因为您设置了数据类型'json'。 只要把它拿出来或说明白就可以了。 您的服务器或uploadhandler不会返回json答案。