[英]jQuery.ajax post JSON sent as concatenated string
我正在为所有$ .ajax.post操作使用通用方法,并且每次使用时对有效负载进行不同的编码。
例如,如果
data: someJSObject
它被发布为JSON。
但是,如果我定义对象(我也尝试将属性放在'引号':val)
data: { mgrID: 0, strId: 0, strName: 'Bowie' }
这会转换为url编码的字符串
mgrID=250411&strId=1006575&strName=Bowie
我的帖子功能
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: url,
data: data,
在chrome控制台中,我可以在发布之前看到对象被识别为有效的json。
你混淆javascript对象和json。 如果你想发送 json,你必须给jquery json 。
data: { mgrID: 0, strId: 0, strName: 'Bowie' }
不是json。
这是json:
data: '{ "mgrID": 0, "strId": 0, "strName": "Bowie" }'
请注意我现在如何为数据而不是对象分配字符串 。
您可以使用JSON.stringify(theobject)
将对象转换为json
data: JSON.stringify({ mgrID: 0, strId: 0, strName: 'Bowie' })
尝试将其字符串化为:
data: JSON.stringify(data)
看看你以前的帖子,我假设你有一个ASP.NET / C#背景,因此这个答案。
在ASP.NET中,我们有一些称为自动序列化的东西。
假设你有这样的课程
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
你有一个网络服务,控制器或任何有这样的方法
public bool AddPerson(Person person)
您可以将序列化的JavaScript对象传递给像这样的json字符串
var DTO = {
person: {
FirstName: "Hugh",
LastName: "Jackman",
Age: 10
}
};
$.ajax({
type: 'POST',
contentType: 'application/json',
dataType: 'json',
url: url,
data: JSON.stringify(DTO)
}).done(function () {
console.log("I passed an object");
});
当你转到服务器端方法AddPerson
并在其上放置一个断点。 然后您将看到json字符串已自动反序列化为Person
类的对象。
这样,您还可以传递一组人员,您可以将其作为List<Person>
检索
PS:JSON.stringify存在于所有现代浏览器中。 对于较旧的,请使用此回退 。
更新 :如果服务器端方法接受这样的三个参数
public bool AddPerson(string firstName, string lastName, int age)
然后像这样更改您的DTO
var DTO = {
firstName: "Hugh",
lastName: "Jackman",
age: 10
};
并使用相同的AJAX调用。
如果你有时间,请阅读此内容。 使用复杂类型使呼叫服务更少......复杂
发布“as json”试试
data: (tempobj={my: "data",is: "json"})
要么
data: {mypost:{my: "data",is: "json"} }
在第二种情况下,您可以在服务器代码中查找mypost var。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.