如何序列化从控制器传入的参数?

时间:2016-08-24 10:42:55

标签: javascript jquery asp.net-ajax

所以我将ASP.NET MVC控制器中的对象列表发送回我的ajax成功响应:

...
success: function (data) {
                var predefinedData = data.serialize();
...

当我从浏览器调试时,我看到数据参数正在读取数组,这没关系,但发生以下错误:

  

未捕获的TypeError:data.serialize不是函数

我已经读过我必须将“vanilla”参数转换为jQuery,所以我做了以下内容:

var makeJqueryArray = $.makeArray(data) //this passes ok
var predefinedData = $.param(makeJqueryArray).serialize(); //but then this reports the same error as before

进一步检查后,我发现$.makeArray(data)字面上没有做任何事情,因为它与以前完全相同,是一个包含n个元素的数组。

然而,JSON.stringify(data);可以正常工作,但这是不可能的,因为这给了我一种完全不同于我需要的格式。

那么有人有任何建议吗?

编辑1:

所以这是我收到的数据(从浏览器调试器手表中看到):

data: Array[3]
0:Object
_int:false
avg:false
max:false
min:false
sensorID:5
sum:false
val:true
__proto__: Object
1:Object
2:Object
length:3
__proto__:Array[0]

以下是我想要格式化的方法(值不匹配,因为我使用的是不同的样本,但你明白了这一点):

"SensorID=1&val=false&min=false&avg=false&max=false&sum=false&_int=false&SensorID=2&val=false&min=false&avg=false&max=false&sum=false&_int=false&SensorID=3&val=false&min=false&avg=false&max=false&sum=false&_int=false&SensorID=4&val=true&val=false&min=true&min=false&avg=true&avg=false&max=true&max=false&sum=true&sum=false&_int=true&_int=false&SensorID=5&val=true&val=false&min=true&min=false&avg=true&avg=false&max=true&max=false&sum=true&sum=false&_int=true&_int=false&SensorID=6&val=false&min=false&avg=false&max=false&sum=false&_int=false&SensorID=7&val=false&min=false&avg=false&max=false&sum=false&_int=false&SensorID=9&val=false&min=false&avg=false&max=false&sum=false&_int=false"

1 个答案:

答案 0 :(得分:1)

如果您有一个数组并且想要请求参数是其键值对的请求,则可以使用$.param(yourArray);。 它将返回一个准备好在您的URL中使用的字符串。

例如(取自the jQuery.param page):

var params = { width:1680, height:1050 };
var str = jQuery.param( params ); // str = "width=1680&height=1050"

在你的情况下,这应该是一样的。所以,试试这个:

var makeJqueryArray = $.makeArray(data) //this passes ok
var finalString = $.param(makeJqueryArray); // Should contain the string you want