【问题标题】:Post json to django rest framework API with jquery-ajax not working使用 jquery-ajax 将 json 发布到 django rest 框架 API 不起作用
【发布时间】:2017-01-20 05:06:48
【问题描述】:

我有模型:

class Publicacion(models.Model):
    usuario = models.ForeignKey(User)
    fecha = models.DateField(auto_now_add=True)

class Estado(models.Model):
    publicacion = models.OneToOneField(Publicacion, on_delete=models.CASCADE)
    texto = models.TextField()
    imagen = models.ImageField(upload_to='estados', blank=True, null=True)

所以我的 json 应该是这样的

{ “状态”:{ “文本”:“”, “形象”:形象 } }

我的 jquery ajax 是

$$.ajax({
    beforeSend: function(request) {
        request.setRequestHeader("Authorization", "Token " + token);
    },
    url: "url",
    dataType: 'JSON',
    type: 'POST',
    data: JSON.stringify({"estado":{"texto": "text", "imagen": dataImg}}),
    success: function (data) { 
        myApp.alert("Correcto");
    },
    error: function (xhr, ajaxOptions, thrownError) {
        console.log(xhr);
    }
});

但是当我发送它时,我有一个 400 错误的请求响应,服务器说“estado”是必需的,知道有什么问题吗?

【问题讨论】:

  • 你试过没有JSON.stringify()吗?
  • 是的,使用邮递员,json 可以完美运行
  • 只是为了笑,尝试设置processData: false
  • 错误 415 不支持的媒体类型
  • 我会检查 JSON 请求并将其发送到 requestb.in 以查看它是否创建正确。或者使用 django 或 http 调试代理进行调试。

标签: jquery json ajax django


【解决方案1】:

首先,JSON.stringify() 将 Javascript 对象转换为 JSON 文本,因此当您正在构建时,您只能像这样发送它:

data: {estado:{texto: "text", imagen: dataImg}},

在其他情况下,您需要这样做(您缺少 contentType):

dataType: 'JSON',
contentType: 'application/json',
data: JSON.stringify(yourObject),

【讨论】:

    【解决方案2】:

    你不必显式设置content_type参数,如果你让jquery处理它,你可以向后端发送一个普通的assoc数组,它会正常工作

    $.ajax("domain/end_point",{
        type: "POST",
        data : {"details": "my assoc data"},
        crossDomain: true,
        // contentType: "application/json; charset=utf-8",
        dataType: "json"
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多