我在javascript中有一个项目列表:
var list = {
{ id: 1, name: 'Charles' },
{ id: 8, name: 'John' },
{ id: 13, name: 'Sally' }
};
但是当我将它发布到服务器上时:
$.ajax({
url: '/Controller/ActionName',
data: { items: list }
});
它像这样到达服务器:
items[0][id]=1&items[0][name]=Charles&items[1][id]=8&items[1][name]=John&items[2][id]=13&items[2][name]=Sally
我如何让它以JSON符号到达,即带括号!这样.NET解析器可以正确解析它吗?
答案 0 :(得分:2)
尝试:
$.ajax({
url: '/Controller/ActionName',
data: { items: JSON.stringify(list) }
});
我尝试过以下选项:
<script type="text/javascript">
var list = [
{ id: 1, name: 'Charles' },
{ id: 8, name: 'John' },
{ id: 13, name: 'Sally' }
];
function run(){
$.ajax({
url: 'default.aspx',
data: { items: JSON.stringify(list) }
});
return false;
}
function run2() {
$.ajax({
url: 'default.aspx',
data: { items: list }
});
return false;
}
function run3() {
$.ajax({
url: 'default.aspx',
data: { items: list },
processData: false
});
return false;
}
function run4() {
$.ajax({
url: 'default.aspx',
data: list
});
return false;
}
</script>
运行1:default.aspx?items =%5B%7B%22id%22%3A1%2C%22name%22%3A%22Charles%22%7D%2C%7B%22id%22%3A8% 2C%22name%22%3A%22John%22%7D%2C%7B%22id%22%3A13%2C%22name%22%3A%22Sally%22%7D%5D 强>
Querystring [“items”] ='[{“id”:1,“name”:“Charles”},{“id”:8,“name”:“John”},{“id”:13 , “姓名”: “萨利”}]'
运行2:default.aspx?items%5B0%5D%5Bid%5D = 1&amp; items%5B0%5D%5Bname%5D = Charles&amp; items%5B1%5D%5Bid%5D = 8&amp; items %5B1%5D%5Bname%5D =约翰&安培;项%5B2%5D%5Bid%5D = 13&安培;项%5B2%5D%5Bname%5D =萨利强>
items [0] [id] 1
items [0] [name] Charles
项目[1] [id] 8
项目[1] [姓名]约翰
items [2] [id] 13
项目[2] [姓名]莎莉
运行3:default.aspx?[object%20Object]
[object Object]
运行4:default.aspx?Charles = undefined&amp; John = undefined&amp; Sally = undefined
请求[“Charles”] ='undefined'
请求[“John”] ='undefined'
请求[“Sally”] ='undefined'
现在从OP,我认为Run 1是必需的选项,因为他想在服务器端处理JSON字符串?
答案 1 :(得分:1)
我在移动设备上,但您可以使用以下库将JSON对象转换为格式良好的JSON字符串来解决此问题。
该库的大小只有3k,还为您提供了额外的JSON功能,例如解析等。
在页面上包含脚本后,您可以将对象转换为JSON字符串并使用以下方式拨打电话:
$.ajax({
type: "POST",
url: '/Controller/ActionName',
cache: false,
data: $.toJSON(list), // Convert JSON object to String for Post
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
GenerateResultsCallback(response.d)
},
error: function (e) {
alert('error during ajax request');
}
});
答案 2 :(得分:0)
来自JQuery AJAX Page:
数据选项可以包含a 查询表单的字符串 key1 = value1&amp; key2 = value2,或者是map的地图 形式{key1:'value1',key2: '值'}。如果使用后一种形式, 数据被转换为查询 发送之前的字符串。这个 处理可以绕过 将 processData 设置为 false
因此,您的JSON对象将转换为查询字符串。
答案 3 :(得分:0)
使用$ .post()代替$ .ajax(),它应该适合你。
$ .ajax执行GET请求,这就是为什么它将您的JSON转换为字符串并附加到查询字符串。
编辑: 看起来你正试图发布一个对象列表,在这种情况下你的var应该是一个像这样的对象数组:
var list = [
{ id: 1, name: 'Charles' },
{ id: 8, name: 'John' },
{ id: 13, name: 'Sally' }
];
$.post({
url: '/Controller/ActionName',
data: { "items": list }
});