当前位置:首页 » 网页前端 » 前端提交json
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

前端提交json

发布时间: 2023-05-03 12:48:00

‘壹’ 前端向后端传一个json数组对象

首先在前端已经获取到这个数组对象:

后端需要接受的json数组格式:

刚开始一直想需要把数组转成json数组,然后再传给后端接口,
最后才发现 ajax请求会自动把数组转成json数组 ,我们就不用再去转一次,
但是最后发现还是报未知错误,经查看发现传给后端的数据变成:0:[Object object]...
最后发现在前端向后端传输的数据进行定义:

可以看到当发送数据的方式是“post”的时候,如果不传或者传的是true,就会把发送的json数据转成formdata对象,所以在页面中我们可以看到发送的数据变成了:0:[Object object],1:[Object object]...
所以传的值应该是

‘贰’ 如何拿到前端传过来的json对象

将数据以json格式传给前端:
function generateDtb() {
//写入
var txtName = document.getElementById("txtName").value;
//创建数组
var dtb = new Array();
//通过循环把数据写入到数组并返回
for (var i = 0; i < firstGroup.length; i++) {

var row = new Object();
row.Name = txtName;
row.fullMoney = firstGroup[i].value;
row.discount = secondGroup[i].value;
dtb.push(row);
}
return dtb;
}

把数组转换成json串传入到后台:
$(function () {
//点击botton1
$("#lbtnOK").click(function () {
var url = "DiscountManger.aspx?ajax=1";
var dtb = generateDtb();
// var strName = document.getElementById("txtName").value;

if (dtb == null)
{ }
else {
//序列化对象
var postdata = JSON.stringify(dtb);
//异步请求
$.post(url, { json: postdata }, function (json) {
if (json) {
jBox.tip("添加成功!", "提示");
location.reload();
}
else {
jBox.tip("添加失败!", "提示");
location.reload();
}
}, "json")

}
});
});

在后台的操作:
首先判断是否需要传输数据

if (!IsPostBack)
{
//判断是否异步请求
if (Request.QueryString["ajax"] == "1")
{
ProcessRequest();
}

在这里进行对数据的处理:
///
/// 处理异步请求
///
private void ProcessRequest()
{
//存入要填写的策略
ArrayList arrDiscount = new ArrayList();
Response.ContentType = "text/html";
string json = Request.Form["json"];
//反序列化DataTable
if (json == null)
{
return;
}
else
{
DataTable newdtb = Json2Dtb(json);
for (int i = 0; i < newdtb.Rows.Count; i++)
{
Entity.StrategyDiscount enStrategyDiscount = new Entity.StrategyDiscount();
//打折方案名
enStrategyDiscount.name = newdtb.Rows[i]["Name"].ToString();
//商店ID
enStrategyDiscount.shopId = long.Parse(LoginInfo.ShopID);

enStrategyDiscount.fullMoney = Convert.ToDecimal(newdtb.Rows[i]["fullMoney"].ToString());
enStrategyDiscount.discount = Convert.ToDecimal(newdtb.Rows[i]["discount"].ToString());
//写入数据到数组
arrDiscount.Add(enStrategyDiscount);
}
//写入数据到数据库
IStrategyBLL strategy = new StrategyBLL();

if (strategy.AddStrategyDiscount(arrDiscount))
{
Response.Write("true");
Response.End();
}
else
{
Response.Write("false");
Response.End();
}

}

这里,我们需要把json转换成datatable
///
/// Json转DataTable
///
///
///
private DataTable Json2Dtb(string json)
{

JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = jss.Deserialize(json);
DataTable dtb = new DataTable();
if (dic.Count > 0)
{
foreach (Dictionary drow in dic)
{
if (dtb.Columns.Count == 0)
{
foreach (string key in drow.Keys)
{
dtb.Columns.Add(key, drow[key].GetType());
}
}
DataRow row = dtb.NewRow();
foreach (string key in drow.Keys)
{
row[key] = drow[key];
}
dtb.Rows.Add(row);
}
}

return dtb;
}

这样,就可以把数据无刷新的写入到数据库。
当然,如果我们有一个从数据库读取的datatable,如果通过json显示在前台呢。
首先,我们需要把datatable转换为json数据

///
/// DataTable转Json
///
///
///
private string Dtb2Json(DataTable dtb)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = new ArrayList();
foreach (DataRow row in dtb.Rows)
{
Dictionary drow = new Dictionary();
foreach (DataColumn col in dtb.Columns)
{
drow.Add(col.ColumnName, row[col.ColumnName]);
}
dic.Add(drow);
}
return jss.Serialize(dic);
}

然后写回到前台

///
/// 处理异步请求
///
private void ProcessRequest()
{
Response.ContentType = "text/html";
string json = Request.Form["json"];
//反序列化DataTable
DataTable newdtb = Json2Dtb(json);
//序列化DataTable为JSON
string back = Dtb2Json(newdtb);
Response.Write(back);
Response.End();
}

在前台接受显示:

$(function() {
//点击botton1
$("#botton1").click(function() {
createTable(json);
});
});

//显示Json中的数据
function createTable(json) {
var table = $("");
for (var i = 0; i < json.length; i++) {
o1 = json[i];
var row = $("");
for (key in o1) {
var td = $("");
td.text(o1[key].toString());
td.appendTo(row);
}
row.appendTo(table);
}
table.appendTo($("#back"));
}

‘叁’ 前端和后端处理不同的拼接的json数据

后端返回的json数据

前端第一种:eval方式

var json = eval('(' + data + ')');//处理返回的json数据

第二种:var json = (new Function("return " + data))();

第三种:json.parse()使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来

后端处理json

这个要不就是form表单的提交

要不就是用选择dom触发

要不就是绑定onclick