javascript - 通过Ajax发送文件到Django

标签 javascript ajax django

我在尝试通过 AJAX 请求向 Django 发送图像时遇到问题。 这是我的 HTML:

<form>
<input type="file" id="files" name="image">
</form>

这是我的 JS:

var control = document.getElementById("files");
var p = {
        title: $('input[name=title]').val(),
        subtitle: $('input[name=subtitle]').val(), 
        content: $('textarea#article-content').val(),
        image: files[0],
    };
    $.ajax({
        url: '/prive/nouveau-projet',
        type: "POST",
        data: JSON.stringify(p),
        crossDomain: true,
        success: function() {
            window.location.href = '/prive/projets/';
        },
        error: function() {
            console.log("error");
        }
    });

这是我的服务器端代码:

if request.method == "POST":
    data = request.POST.keys()[0]
    dataJson = json.loads(data)
    p = Projet(title=dataJson['title'], subtitle=dataJson['subtitle'], content=dataJson['content'], image=dataJson['image'])
    p.save()
    return HttpResponse()

这就是我尝试过的,但我收到有关 dataJson['image'] 的错误。你能帮我一下吗?

最佳答案

你不需要JSON.stringify

就这样写:

var data = new FormData();
var img = $('#image_field_id')[0].files[0];
data.append('img', img);
$.ajax({
    url : "/prive/nouveau-projet",
    processData : false,
    contentType : false,
    type : 'POST',
    data : data,
}).done(function(data) {
    // work with data              
});

在 View 中

if request.method == "POST":
    file = request.FILES.get('img') # FILES instead of POST
    ....

关于javascript - 通过Ajax发送文件到Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27488832/

相关文章:

javascript - 为什么 express.js 路由发送的 html 页面没有连接到 css 样式表?

javascript - D3.js重叠条形图显示错误

javascript - CSS 或 jQuery 不间歇性加载

php - 尝试让 php 按钮与 SQL 交互,也许是 AJAX?

jquery - 页面卸载时使用 JQuery 的 Ajax 请求

javascript - 第一次请求加载json数据并显示在首页

android - 将桌面和移动客户端连接到 Django 和 Sails MVC webframeworks

javascript - Django Ajax - $.get 方法成功函数在没有调用任何服务器端 View 的情况下执行

javascript - 如果是一个月的最后一天,如何使用 javascript 验证日期?

javascript - jQuery 更改事件未正确触发