【发布时间】:2014-06-16 07:12:35
【问题描述】:
解决了。解决方案是将 contentType 设置为 'application/json' 并使用 JSON.stringify(obj) 而不是 obj,但是您可能必须根据语言或框架更改在服务器上获取数据的方式。下面的原始问题...
这就是我正在尝试的方法
var obj = {
'firstName': 'bill',
'lastName': 'johnson',
'hobbies': ['apples', 'dogs']
});
$.ajax({
type: 'POST',
url: '/myurl'
data: obj,
success: function(data){alert(data);}
});
如果我提醒/记录JSON.stringify(obj),我会得到正确的结果,即:
{'firstName': 'bill', 'lastName': 'johnson', 'hobbies': ['apples', 'dogs']}
但是,当我执行上述 ajax 调用时,我的服务器会得到以下信息:
{'firstName': 'bill', 'lastName': 'johnson', 'hobbies[]': 'apples'}
这显然不是正确的 json。我尝试添加各种 contentType 参数,但我的服务器实际上什么也没得到(一个空的发布请求)。
我还尝试将 data 参数设置为 JSON 的预字符串化字符串(这是正确的),但随后 jquery 对其进行了转义,我的服务器得到了这个:
{"{\"firstName\":\"bill\",\"lastName\":\"johnson\",\"hobbies\":[\"apples\",\"dogs\"]}": ""}
我尝试将processData 设置为false,但没有任何改变。
我已经研究了好几个小时,但还没有让它发挥作用。当然有一种方法可以将带有列表的 json 发送到服务器......
有什么建议吗?
【问题讨论】:
-
将 obj 作为 JSON.stringify(obj) 发送。如果需要,在服务器端反序列化相同的内容或一些 html 解码内容。
-
服务器想怎么获取?您可以将数据作为 JSON 发送,而不是 x-www-form-urlencoded ... benjamin-schweizer.de/jquerypostjson.html -- 这里还有一些背景资料:stackoverflow.com/questions/2845459/…
-
@mgilson 服务器希望将其作为原始的、未转义的 json 获取,例如 {"firstname": "bill"... 等,但如有必要可能会改变。我将尝试博客文章中的代码。
-
@user3391564 -- 我怀疑它收到了一个空请求。问题是大多数框架都需要 x-www-form-urlencoded 数据。如果您实际查看请求 body,JSON 将在其中(您可能需要自己解析)。我最近在处理来自 angular 的 $http 的请求时遇到了这个问题(因为它将 json 发布为
application/json这实际上是有道理的......)
标签: javascript jquery ajax json post