jQuery.ajax发布JSON作为连接字符串发送

时间:2013-10-31 17:28:15

标签: javascript jquery ajax

我对所有$ .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。

4 个答案:

答案 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)

将对象转换为json
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。