jQuery JSON ajax 请求上的空请求正文

Posted

技术标签:

【中文标题】jQuery JSON ajax 请求上的空请求正文【英文标题】:Empty request body on jQuery JSON ajax request 【发布时间】: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 后缺少 ) 【参考方案1】:

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

【讨论】:

我相信 $.ajax 调用中的 dataType: 'text' 选项会阻止 jQuery 进行任何解释,所以这不应该适用。 好的。很高兴知道。谢谢!

以上是关于jQuery JSON ajax 请求上的空请求正文的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajax请求成功,但是进入了success,但是返回的数据data为空

jquery .ajax 对 ruby​​ on rails 服务器的 post 请求在客户端出现 JSON.parse 错误

JQuery ajax

跨域 jquery ajax 请求

带有json响应的jQuery ajax请求,如何?

android - 来自 Foursquare 的 JSON 请求后的空正文