【发布时间】:2015-08-15 02:19:35
【问题描述】:
我正在尝试通过 get/post 向 django 发送简单的 ajax 请求(没关系),似乎 django 在解析请求时会压扁字典。
举例:
我在 ajax 中发送给 django 的内容(通过 jquery):
{'payload':{'website':'localhost.com'}}
我在 django 端的 request.post 中得到了什么:
{u'payload[website]': [u'localhost.com']}
为什么?
谢谢,
编辑: 添加了 jquery 调用
$.ajax({
type: "GET",
url: full_url,
data: {'payload': {'website': 'localhost.com'}},
dataType: "json",
contentType: "application/json",
async: true,
timeout: 5000,
});
【问题讨论】:
-
实际上是 jquery 把字典弄平了。您不能通过 ajax 发送“字典”,只能发送纯文本。您可以将对象编码为 json 格式的文本,或表单数据(默认情况下,这里似乎发生了什么)或 xml 或任何内容
-
你发送到 django 服务器的内容类型是什么?它应该设置为:'application/json'
-
@jumojer "json" 和 "application/json" 返回相同的结果。
-
@Anentropic 我将数据作为 json 发送,所以 jquery 应该在内部执行 JSON.stringify。我也尝试以纯文本形式发送并自己进行字符串化,结果略有不同: {u'{"payload":{"website":"localhost.com"}}': [u'']}
-
contentType应该是application/x-www-form-urlencoded或multipart/form-data: api.jquery.com/jQuery.ajax