利用JSON数据向前台ajax 传递数组到前台参数,怎没知道后台的json数据是ajax 传递数组到前台给哪个页面的?

1451人阅读
先看看源代码:
_page=voucher4TestCSharp.queryForPagePDF(admdivcode,styeay,
vtcode,star_voucherno,curPage, pageSize);
if(_page!=null){
list = _page.getResultList();
listMap = new ArrayList&Map&String,String&&();
for(VoucherDTO_PDF newVoucherDTO_PDF:list){
Map&String,String& map =
map = BeanUtils.describe(newVoucherDTO_PDF);
String voucher_no=newVoucherDTO_PDF.getVoucher_no();
String quhua_code=newVoucherDTO_PDF.getAdmdivcode();
String vt_code=newVoucherDTO_PDF.getVt_code();
String styear=newVoucherDTO_PDF.getStyear();
map.put(&download&, &&a href=javascript:download('&+voucher_no+&','&+quhua_code+&','&+vt_code+&','&+styear+&')&下凭证载&/a&&);
listMap.add(map);
Map&String,List&Map&String,String&&& resultMap = new HashMap&String,List&Map&String,String&&&();
resultMap.put(&data&, listMap);
JSONObject jo = JSONObject.fromObject(resultMap);
jo.put(&recordCount&, _page.getTotalRows());
this.actionWrite(jo.toString());
写回到前台的数据JO:
{&admdivcode&:&110000&,&voucher_no&:&TCNO&,&vt_code&:&1101&,&styear&:&2014&,&download&:&&a href=javascript:download('TCNO',';,'1101','2014')&下凭证载&\/a&&},
{&admdivcode&:&110000&,&voucher_no&:&TCNO&,&vt_code&:&1101&,&styear&:&2014&,&download&:&&a href=javascript:download('TCNO',';,'1101','2014')&下凭证载&\/a&&},
{&admdivcode&:&110000&,&voucher_no&:&TCNO&,&vt_code&:&1101&,&styear&:&2014&,&download&:&&a href=javascript:download('TCNO',';,'1101','2014')&下凭证载&\/a&&},
{&admdivcode&:&110000&,&voucher_no&:&TCNO&,&vt_code&:&1101&,&styear&:&2014&,&download&:&&a href=javascript:download('TCNO',';,'1101','2014')&下凭证载&\/a&&},
{&admdivcode&:&110000&,&voucher_no&:&yk00002&,&vt_code&:&1101&,&styear&:&2014&,&download&:&&a href=javascript:download('yk00002',';,'1101','2014')&下凭证载&\/a&&},
{&admdivcode&:&110000&,&voucher_no&:&TCNO&,&vt_code&:&1101&,&styear&:&2014&,&download&:&&a href=javascript:download('TCNO',';,'1101','2014')&下凭证载&\/a&&},
{&admdivcode&:&110000&,&voucher_no&:&LL00001&,&vt_code&:&1101&,&styear&:&2014&,&download&:&&a href=javascript:download('LL00001',';,'1101','2014')&下凭证载&\/a&&},
{&admdivcode&:&110000&,&voucher_no&:&yk00001&,&vt_code&:&1101&,&styear&:&2014&,&download&:&&a href=javascript:download('yk00001',';,'1101','2014')&下凭证载&\/a&&},
{&admdivcode&:&110000&,&voucher_no&:&TCNO&,&vt_code&:&1101&,&styear&:&2014&,&download&:&&a href=javascript:download('TCNO',';,'1101','2014')&下凭证载&\/a&&},
{&admdivcode&:&110000&,&voucher_no&:&TCN&,&vt_code&:&1101&,&styear&:&2014&,&download&:&&a href=javascript:download('TCN',';,'1101','2014')&下凭证载&\/a&&},
{&admdivcode&:&110000&,&voucher_no&:&TCN11O&,&vt_code&:&1101&,&styear&:&2014&,&download&:&&a href=javascript:download('TCN11O',';,'1101','2014')&下凭证载&\/a&&}
&recordCount&:11}
最重要的是格式,以什么样的格式即最终要以JSON的格式传到后台去。这个格式是JSON的规范,所以不难理解为什么为什么在后台Java代码中费劲心思不断将数据转换成Map,
Map&String,String& map =map = BeanUtils.describe(newVoucherDTO_PDF);
Listt数组,再将List转换成Map数组,
List&Map&String,String&& listMap=
listMap = new ArrayList&Map&String,String&&();
listMap.add(map);
再new一个map放入List,y而是为了和Ext或者前台的根对应:
Map&String,List&Map&String,String&&& resultMap = new HashMap&String,List&Map&String,String&&&();
放入数据:
resultMap.put(&data&, listMap);
最后将map装换成JSON数据,通过JSONObject类
将map转换为JSON数据:
JSONObject jo = JSONObject.fromObject(resultMap);
对于前台的数据接收:前台其实是自动将JSON解析出来的,不需要程序员的参与,JSON本身就是一个Map,一个标准。【以下是公司封装的,只供参考】
一个关于得到GridPanel内容的函数:
function getStore(urlpath, fileds) {
var fields = getFiled(fileds);
var store = new Ext.data.JsonStore( {
type: 'ajax',
url : urlpath,
timeout: 90000,
&strong&type: 'json',
root: 'data',
totalProperty : 'recordCount'&/strong&
pageSize: itemsPerPage,
//remoteSort : true,
fields : fields,
autoLoad : false
黑体标记的就是传递过来的数据。
再看看var fields = getFiled(fileds);此时功能只是要显示部分列选项数据。
function getFiled(filed) {
var fields = filed.split(&,&);
var filed = &[&;
for ( var i = 0; i & fields. i++) {
filed = filed + &{name: '& + fields[i] + &'},&;
filed = filed.substring(0, filed.length - 1);
filed = filed + &]&;
return strToJson(filed);
& & & & & & & & & & & & & & & & & & & & &
可以看到这个fields的格式其实和data根数据的格式是相对应的。
总结:不管怎样后台传递JSON数据的格式是固定的,这点要清楚,这是一个规范。
JSON基础:/view/136475.htm#【百度百科】
以上是自己对后台拼JSON到前台的领悟,非常不清楚,只供参考。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:350422次
积分:7473
积分:7473
排名:第2892名
原创:396篇
转载:43篇
评论:72条
(2)(4)(3)(1)(3)(8)(2)(6)(1)(2)(1)(3)(1)(3)(1)(3)(7)(4)(5)(10)(4)(3)(3)(1)(2)(12)(10)(15)(21)(31)(40)(42)(37)(22)(24)(74)(15)(13)这几天在学习MVC使用AJAX异步刷,因为是新手。所以在js中传参数到后台以及后台返回数据到前台怎么接受,怎么前台遍历出JSON数据都开始不知道,相信新手在使用时跟我一样会遇到,这里我就和大家分享一下。新手勿喷。。。
这里使用VS2010中新建的mvc 3.0项目来举例说明
1、传递的是单个对象类型
先看后台action方法
public ActionResult GetValue(){ChangePasswordModel model1 = new ChangePasswordModel();model1.OldPassword = "111";model1.NewPassword = "222";
& &return this.Json(model1);//返回对象到前台
这样返回的model1对象就会传递到result中去,前台可以直接使用result.NewPassword来取值
url: "GetValue", //表示提交给的action
type: "post", & //提交方法
datatype: "json",//数据类型
success: function (result) { //返回的结果自动放在resut里面了
  alert(result.NewPassword);
2、传递的是对象数组也就是List集合,这里演示遍历数据,并异步刷新表格
后台获取对象集合
public ActionResult GetValue()
StudentService studentservice = new StudentService();string studentlist= studentservice.SelectAll();return this.Json(studentlist);
前台获取数据并刷新表格
&script type="text/javascript"&
function shuxin() {
url: "GetValue",
type: "post",
datatype: "json",
success: tableappend(result) //成功则执行表格刷新函数
&//动态刷新表格function tableappend(result) {var studentlist = eval(result);
&for (var i = 0; i & studentlist. i++) {//创建tr对象&var addtr = document.createElement("tr");
//行中创建三个td对象,并把studentlist中的值赋给它var addtd1 = document.createElement("td");addtd1.innerHTML = studentlist[i].&var addtd2 = document.createElement("td");&addtd2.innerHTML = studentlist[i].&var addtd3 = document.createElement("td");&addtd3.innerHTML = studentlist[i].
&//把创建的td对象加入tr中去&addtr.appendChild(addtd1);&addtr.appendChild(addtd2);&addtr.appendChild(addtd3);//
//把tr加入table中去&document.getElementById("retable").appendChild(addtr);&}
3、参数传递(另外的代码例子说明)
对于单个参数传递或者不同对象的参数可以直接使用{"key":value};的方式来传值
& & & & & & & & & & &{
& & & & & & & & & & & & &url: "update",
& & & & & & & & & & & & &type: "post",
& & & & & & & & & & & & &datatype: "json",
& & & & & & & & & & & & &data:{"room_id":inputobj[0].innerText,"room_name":inputobj[1].innerText,"room_type":inputobj[2].innerText,
& & & & & & & & & & & & & & &"room_limittime": inputobj[3].innerText, "username": inputobj[4].innerText, "room_state": inputobj[5].innerText
& & & & & & & & & & & & &},&
& & & & & & & & & & & & &success: function (result) { //返回的结果自动放在resut里面了
& & & & & & & & & & & & & & &if (result) {
& & & & & & & & & & & & & & & & alter();
& & & & & & & & & & & & & & &}
& & & & & & & & & & & & &}
& & & & & & & & & & &});
后台使用 FormContext对象来获得参数
public ActionResult Update(FormCollection fc)
//获取前段传过来的参数
RoomModel room = new RoomModel();
room.RId =Convert.ToInt32(fc["room_id".Trim()]);
room.RName = fc["room_name".Trim()];
room.RType = fc["room_type".Trim()];
room.RLendLimitTime = Convert.ToInt32(fc["room_limittime".Trim()]);
这里看到传递多个参数的时候,前台和后台都很麻烦,能不能像页面表单一样直接可以把model对象给传递回去Controller呢?
当然这是可以的
把这些值封装一下就可以了,例如
&script type="text/javascript"&function shuxin() {
var&model=&{};model.NewPassword=&"123";model.OldPassword&=&"456";
$.ajax({url: "GetValue",type: "post",datatype: "json",
data:model,//在把这个对象作为参数传过去就可以了success: tableappend(result) //成功则执行表格刷新函数});}
直接把model作为参数 这样值就会都封装给了model对象
public ActionResult update(ChangePasswordModel model)
{&  return View();
5、apsx和cshtml
JS中对JSON的取值方式是一样
阅读(...) 评论()1670人阅读
Struts2(4)
JQuery(2)
本方法是在后台将数据转成json数据再传回页面。
需要的jar包:
</mons-beanutils-1.7.jar
</mons-collections-3.2.1.jar
</mons-lang-2.4.jar
</mons-logging-1.0.4.jar
5.ezmorph-1.0.4.jar
前台jsp页面:
&table id=&dg& title=&My Users& class=&easyui-datagrid& style=&width:700px;height:250px&
url=&get_user01&
toolbar=&#toolbar& pagination=&true&
rownumbers=&true& fitColumns=&true& singleSelect=&true&&
&th field=&firstname& width=&50&&First Name&/th&
&th field=&lastname& width=&50&&Last Name&/th&
&th field=&phone& width=&50&&Phone&/th&
&th field=&email& width=&50&&Email&/th&
其中url是action。URL的返回&#20540;必须是json类型。
struts.xml配置文件
&package name=&a& extends=&struts-default&&
&action name=&get_user01& class=&com.action.SyohinGetAction& method=&write&&
&/package&
后台部分代码:
public void write() throws IOException {
HttpServletResponse response= ServletActionContext.getResponse();
* 在调用getWriter之前未设置编码(既调用setContentType或者setCharacterEncoding方法设置编码),
* HttpServletResponse则会返回一个用默认的编码(既ISO-8859-1)编码的PrintWriter实例。这样就会
* 造成中文乱码。而且设置编码时必须在调用getWriter之前设置,不然是无效的。
response.setContentType(&text/charset=utf-8&);
//response.setCharacterEncoding(&UTF-8&);
PrintWriter out = response.getWriter();
//JSON在传递过程中是普通字符串形式传递的,这里简单拼接一个做测试
Dao dao=new Dao();
list=dao.getHin();
result = JSONArray.fromObject(list).toString();
String jsonString = result;
out.println(jsonString);
out.flush();
out.close();
这种方法不需要返回视图。
直接通过response对象将json数据传到页面。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5562次
排名:千里之外
(3)(1)(2)(1)(1)(2)(1)(1)}

我要回帖

更多关于 前台传递json数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信