我对所有$ .ajax.post操作使用通用方法,并且每次使用时对有效负载进行不同的编码。
例如,如果
data: someJSObject
它被发布为JSON。
但是,如果我定义了对象(我也尝试将属性放在'quotes':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。
答案 0 :(得分:4)
你混淆javascript对象和json。如果你想发送 json,你必须提供jquery json 。
data: { mgrID: 0, strId: 0, strName: 'Bowie' }
不是json。
这是json:
data: '{ "mgrID": 0, "strId": 0, "strName": "Bowie" }'
请注意我现在如何为数据而不是对象分配字符串。
您可以使用JSON.stringify(theobject)
data: JSON.stringify({ mgrID: 0, strId: 0, strName: 'Bowie' })
答案 1 :(得分:1)
尝试将其字符串化为:
data: JSON.stringify(data)
答案 2 :(得分:1)
查看以前的帖子,我假设你有一个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>
P.S:JSON.stringify存在于所有现代浏览器中。对于旧版本,请使用this fallback。
更新:如果服务器端方法接受三个这样的参数
public bool AddPerson(string firstName, string lastName, int age)
然后像这样改变您的DTO
var DTO = {
firstName: "Hugh",
lastName: "Jackman",
age: 10
};
并使用相同的AJAX调用。
如果你有时间,请阅读此内容。 Using complex types to make calling services less… complex
答案 3 :(得分:-2)
发布“as json”试试
data: (tempobj={my: "data",is: "json"})
或
data: {mypost:{my: "data",is: "json"} }
在第二种情况下,您可以在服务器代码中查找mypost var。