繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM