解决。解决方案是将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发送到服务器......
任何提示?
答案 0 :(得分:1)
从您认为对我来说正确的帖子中,我对JSON本人有点新意,但看起来它将最后一个键值对视为一个数组,以访问您必须使用正确索引访问的各个元素价值。来自json.org JSON基于两种结构: •名称/值对的集合。在各种语言中,这被实现为对象,记录,结构,字典,散列表,键控列表或关联数组。 •有序的值列表。在大多数语言中,这被实现为数组,向量,列表或序列。 如果您仍然认为有问题,可以在jsonlint.com上查看。
答案 1 :(得分:0)
试试这个
$.ajax({
url: url,
type: 'POST',
datatype: "json",
traditional: true,
data: {
menuItems: JSON.stringify(myArray),
},
success: function () { window.alert('success'); },
error: function (event, request, settings) {
window.alert('error'); },
timeout: 20000
});