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 错误