pythonpost请求参数为list_利⽤post向后台传递数组或者list参
数
在项⽬上⽤到了批量删除与批量更改状态,前台使⽤了EasyUI的DataGrid,⽤到了批量更改数据状态功能。
在前台可以获取每条数据的ID,但是如何通过数组⽅式传递给后台?
⽬前有两种⽅式可⾏:
⽅式⼀:
前台代码:
// ⽅式⼀
var _list = {};
for (var i = 0; i < checkedRow.length; i++) {
_list["selectedIDs[" + i + "]"] = checkedRow[i].ID;
}
$.ajax({
url: '@Url.Action("SetCallBackStatus")',
//data: { "selectedIDs": _list },
data: _list,
dataType: "json",
type: "POST",
//traditional: true,
success: function (responseJSON) {
// your logic
alert('Ok');
}
});
注意:
1、_list 是⼀个对象
2、_list中的属性需要结合后台参数名称,例如”selectedIDs“,组合成类似:selectedIDs[0],selectedIDs[1]...等Request.Params
这⾥是最重要的,否则后台认不出来。这种⽅式也可以传递⾃定义类的数组。组合⽅式就是
selectedIDs[0].FirstName,selectedIDs[0].LastName,selectedIDs[1].FirstName,selectedIDs[1].
3、ajax的data参数直接指定为_list
后台代码:
public ActionResult SetCallBackStatus(List selectedIDs){
string result = "ok";
string errMsg = "";
return this.JsonFormat(new { result = result, errMsg = errMsg });
}
⽅式⼆:
前台代码:
var _list = [];
for (var i = 0; i < checkedRow.length; i++) {
_list[i] = checkedRow[i].ID;
}
$.ajax({
url: '@Url.Action("SetCallBackStatus")',
data: { "selectedIDs": _list },
//data: _list,
dataType: "json",
type: "POST",
traditional: true, //使⽤该属性放置深度序列化
success: function (responseJSON) {
// your logic
alert('Ok');
}
});
或者使⽤post
var url = '@Url.Action("SetCallBackStatus")';
var data = { "selectedIDs": _list };
//$.param(data,true)不会深度解析参数,返回⼀个字符串,字符串这种格式:"x=1&y=2&xx=3&xx=4",和GET⽅式在url后拼接请求参数是⼀样的
$.post(url ,$.param(data,true),function(data){
var obj=eval('('+data+')');
console.info('success');
});
注意:
1、_list 是⼀个数组。
2、ajax参数中data为{“selectedIDs”:_list}//传递的参数selectedIDs为⼀个数组
3、这种⽅式⽐较重要的 traditional:true,或者将 _list参数转换⼀下$.param(_list,true)。这⾥其实就是将_list作为传统的⽅式传递给后台。JQUERY默认是做了转换的,⾃动在参数后⾯追加了”[]“。
如:
$.param(object,trad)
参数说明
object:必需。规定要序列化的数组或对象。
trad:可选。布尔值,指定是否使⽤参数序列化的传统样式
有时候提交参数中有数组,设置这个可选项就显得⼗分必要了。
var obj = {
title: "test",
arr:[1,2,3]
};
$.param(obj,true)
--->>title=test&arr=1&arr=2&arr=3
$.param(obj)
--->>title=test&arr%5B%5D=1&arr%5B%5D=2&arr%5B%5D=3
后台代码:
同⽅式⼀
下⾯以实际中的例⼦来说明:
data是⼀个对象,⾥⾯有⼀个object对象,object的属性typeMaskValues为⼀个数组,有三个元素在数组中发送请求⽅式:
var data={"id":row.id};
for (var key in row)
{
if (!$.isArray(row[key]) && !$.isFunction(row[key])
&& (typeof row[key]) == "object")
{
continue;
}
data["object."+key]=row[key];
}
var param = JSON.stringify(data);
var param2 = $.param(data);
var param3 = $.param(data,true);
debugger;
$.post(url,data,function(data){
});
$.post(url,param,function(data){
console.info(111);
});
$.post(url,param2,function(data){
console.info(222);
});
$.post(url,param3,function(data){
console.info(222);
});
$.ajax({
url: url,
data: data,
dataType: "json",
typeof arraytype: "POST",
// traditional: true, //使⽤该属性放置深度序列化
success: function (responseJSON) {
console.info(333);
}
});
$.ajax({
url: url,
data: data,
dataType: "json",
type: "POST",
traditional: true, //使⽤该属性放置深度序列化
success: function (responseJSON) {
console.info(444);
}
});
1. JSON.Stringify()处理后返回字符串:
var param = JSON.stringify(data);
因为data为⼀个对象,所以在转化为JSON字符串的时候以"{}"包裹,⾥⾯的数组格式为:"xx":["1","2"] JSON字符串开始:
JSON字符串⾥⾯的数组:
2. $.param 处理后的格式为字符串,该字符串的式样为get请求在后⾯拼接多个参数的⽅式⼀样, var param2 = $.param(data);
字符串开始:
⾥⾯的数组:
3.$.param 处理后的格式为字符串,该字符串的式样为get请求在后⾯拼接多个参数的⽅式⼀样, var param3 = $.param(data,true);
字符串开始:
⾥⾯的数组:
POST⽅式向后台传递参数:
1.$.post(url,data,function(data){});
控制台的参数传递:
2.$.post(url,param,function(data){})
3.$.post(url,param2,function(data){});
4.$.post(url,param3,function(data){
console.info(222);
});
5.$.ajax({
url: url,
data: data,
dataType: "json",
type: "POST",
// traditional: true, //使⽤该属性放置深度序列化
success: function (responseJSON) {
console.info(333);
}
});
6.$.ajax({
url: url,
data: data,
dataType: "json",
type: "POST",
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论