【问题标题】:Empty request body on jQuery JSON ajax requestjQuery JSON ajax 请求上的空请求正文
【发布时间】:2014-05-06 19:51:24
【问题描述】:

服务器:在 Heroku 上运行的 Django 1.4。所有请求都是 HTTPS。

我的 ajax 调用如下所示:

var data = {
  username: form.find('input[name="username"]').val(),
  email: form.find('input[name="email"]').val()
};
$.ajax({
  url: '/register',
  type: 'POST',
  data: JSON.stringify(data),
  contentType: 'application/json',
  dataType: 'text',
  headers: {
    'X-CSRFToken': $.cookie('csrftoken')
  }
});

有时,在服务器上解析请求正文会失败,因为request.body 完全为空。这是相当罕见的,但由于我在很多页面上使用这个成语,我每周都会看到几次。大概占这些请求的 2-5%。

CSRF 令牌标头与其余部分一起存在,因此似乎只有主体本身丢失了。在最近的一个请求中,我还注意到一个 CONTENT_LENGTH 2 标头,它太短而无法包含真实的请求数据。我想知道它是在哪里添加的。

我希望得到一些帮助来调试它。我看不到 JSON.stringify 调用返回空字符串的任何方法。这合理吗?如果是这样,那么它必须是请求正文要么在飞行中被剥离,要么我的 Django 应用程序中的某些东西正在这样做。

非常欢迎任何关于如何重现此问题的帮助调试或想法。

【问题讨论】:

  • 您在 javascript 中出现错误,在第二个 val 后缺少 )

标签: jquery ajax json django heroku


【解决方案1】:

我唯一一次看到类似的行为是当我请求数据时,在检索端我将数据解释为错误的类型,例如。在我的情况下,jQuery 需要 JSON,但发送了 XML,然后我得到空数据。然后我必须设置 jQuery 将数据显式解释为 xml。你会是这样吗?

【讨论】:

  • 我相信 $.ajax 调用中的 dataType: 'text' 选项会阻止 jQuery 进行任何解释,所以这不应该适用。
  • 好的。很高兴知道。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-11-12
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 2019-11-18
  • 1970-01-01
相关资源
最近更新 更多