django - 使用ajax上传文件失败

时间:2015-11-29 07:17:24

标签: jquery ajax django django-views

我正在尝试使用django中的ajax上传图片。当我发布没有ajax的常规方式时,它会按预期上传。但是当我使用ajax上传时,我获得了成功函数,但是我的表单在视图中无效,而我得到的数据来自视图中的else条件:

  

{“image”:[“此字段为必填项。”]}

JS:

$('#settings-dialog #background-settings #image-device #upload').on('click', function() {
    var modify_frm = $('#settings-dialog #background-settings #image-device #upload-form');
    $.ajax({
        type: modify_frm.attr('method'),
        url: modify_frm.attr('action'),
        data: modify_frm.serialize(),
        dataType: 'json',
        success: function(data) {
            $('#settings-dialog #background-settings #image-device #upload').text(data);
        },
        error: function(data) {
            $('#settings-dialog #background-settings #image-device #upload').text(JSON.stringify(data));
        }
    });
});

我在这里缺少什么?你能帮我解决一下吗?

使用ajax查看无效:

@login_required(login_url='/custom123user/login')
def admin_page_snap_add(request, page_id):
    if not request.user.is_admin:
        return render(request, 'admin_login_invalid.html')
    else:
        page = Page.objects.get(id=page_id)
        if request.user == page.user:
            if request.is_ajax() and request.POST:
                form = PageSnapForm(request.POST, request.FILES)
                if form.is_valid():
                    page_snap = form.save(commit=False)
                    page_snap.page = page
                    page_snap.user = page.user
                    page_snap.save()
                    data = 'Uploaded'
                    return HttpResponse(json.dumps(data), content_type='application/json')
                else:
                    data = form.errors
                    return HttpResponse(json.dumps(data), content_type='application/json')
            else:
                raise Http404
        else:
            return render(request, 'wrong_user.html')

1 个答案:

答案 0 :(得分:0)

使用AJAX上传图片并不像普通上传那样简单。

请参阅此问题:How to send FormData objects with Ajax-requests in jQuery?

然后有一个名为jQuery Form Plugin的jQuery插件。它会为您处理所有肮脏的工作,因此您不必担心将文件绑定到表单等等。这是:http://malsup.com/jquery/form/