jQuery:在JSON中混合使用字符串和Javascript对象列表

时间:2014-06-10 12:14:29

标签: javascript jquery asp.net json controller

我尝试做的事情可能很简单,但是对jQuery并不熟悉,我无法弄清楚如何做到这一点。

我想将一些数据作为JSON发送到ASP.NET控制器。数据包含一些字符串和一个对象列表。

“守则”看起来有点像这样:

查看:

    $(document).ready(function () {
    var stuff = [
        { id: 1, option: 'someOption' },
        { id: 2, option: 'someOther' },
        { id: 3, option: 'anotherOne' }
    ];

    things = JSON.stringify({ 'things': things });
    var dataRow = {
        'String1': 'A String',
        'String2': 'AnotherOne'
    }
    dataRow = JSON.stringify(dataRow);
    var sendData = dataRow + things;
    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: 'POST',
        url: '/Backend/DoStuffWithStuff',
        data: sendData,
        success: function () {
            alert('Success!');
        },
        failure: function (response) {
            alert('Fail! :(');
        }
    });
});

控制器:

    public class Stuff
    {
        public int id { get; set; }
        public string option{ get; set; }
    }

    public void DoStuffWithStuff(string String1, String2, List<Thing> things)
    {
        //Do my Stuff
    }

任何想法都会很棒! :)

2 个答案:

答案 0 :(得分:1)

您不需要对json数据进行字符串化。 您只需要创建一个要发送的对象,而不是

var jsonObject = {
   'string' : 'string',
   'object' : {
       'stirng': 'string'
   }
};

$.ajax({type: "POST", url: DotNetScript, data: jsonObject})
.done(function(dataBack){
   //what to do with data back
});

答案 1 :(得分:0)

到目前为止它实际上看起来并不太糟糕!只是一些事情......

[HttpPost]
public void DoStuffWithStuff(string String1, String2, List<Stuff> things)
{
    //Do my Stuff
}

在这里,你实际上并没有给string2一个类型。我会假设这是一个错字,但这是次要部分。

此外,在该方法中,请注意它顶部有HttpPost。在你的javascript中:

$.ajax({
    ...
    type: 'POST',
    ...
});

你指定POST,所以你必须使方法支持发布(在这种情况下你也可以通过将类型更改为GET,然后删除属性,但我不确定你的“东西”需要什么来逃避GET。 ..)

var stuff = [
    { id: 1, option: 'someOption' },
    { id: 2, option: 'someOther' },
    { id: 3, option: 'anotherOne' }
];

things = JSON.stringify({ 'things': things });
var dataRow = {
    'String1': 'A String',
    'String2': 'AnotherOne'
}
dataRow = JSON.stringify(dataRow);
var sendData = dataRow + things;

你实际上没有将东西传递给你的方法,这可能会有所帮助......

这是使用正确的JSON传递重写的ajax方法(对于你在这里尝试做的事情)。

$(document).ready(function () {
    var stuff = [
        { id: 1, option: 'someOption' },
        { id: 2, option: 'someOther' },
        { id: 3, option: 'anotherOne' }
    ];
    var dataRow = {
        String1: 'A String',
        String2: 'AnotherOne'
        things: stuff
    }
    $.ajax({
        dataType: 'json',
        type: 'POST',
        url: '/Backend/DoStuffWithStuff',
        data: sendData,
        success: function () {
            alert('Success!');
        },
        failure: function (response) {
            alert('Fail! :(');
        }
    });
});