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

如何拿到前端传过来的json对象,第1张

数据以json格式传给前端:

function generateDtb() {

//写入

var txtName = document.getElementById("txtName").value

//创建数组

var dtb = new Array()

//通过循环把数据写入到数组并返回

for (var i = 0i <firstGroup.lengthi++) {

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 = 0i <newdtb.Rows.Counti++)

{

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 = 0i <json.lengthi++) {

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"))

}

前端发送类似如下的ajax请求:

后台如果使用Servlet来接收的话,红框中直接写前端的JSON的实体类名来获取;

如果使用SSM框架整合的时候可以在Controller层配置Spring的注解@RequestBody可以处理前台传的json数据与后台实体类对应。

前台

ajax以data将页面参数传到后台,后台通过request.getParameter()来获取参数值。通过逻辑计算后,将需要返回前台的数据通过out返回。前端页面ajax中的success方法能够接收到后台返回的数据。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10821208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存