码一次前后台post请求交互,以及接口的使用,json数据格式的传递
近几天,公司疯狂加班,然后补做了很多功能,很多东西虽然是自己熟悉的,但是却不会上手,动手实践能力仍需加强,对此对一些代码记录,留待学习和总结。
简单描述功能
首先,根据城市下拉选择框选择城市,然后级联下拉线路,级联下拉城市所对应的所有线路。
前台post请求后台,将前台下拉的城市和线路下拉值传递给后台,后台通过前天传的城市和下拉进行接口查询,通过接口的方式查到所需的值。
具体实现
前台JSP、JS、后台action 源码
设置下拉select的id值,设置其id=city,name=’city’,因为要根据城市的下拉去做线路下拉的级联下拉,所以当城市改变的时候,线路也要随之更改为该城市所对应的线路,给select添加refreshLine()事件来触发。
<div class="count-hd">
<label>城市</label>
<select id="city" name="city" onchange="refreshLine()">
<option value="1">北京市</option>
<option value="2">天津市</option>
<option value="3">上海市</option>
<option value="4">澳大利亚市</option>
<option value="5">北欧市</option>
</select>
<button class="btn btn-info" onclick="retrieve()">查询</button>
</div>
refreshLine()事件JS源码:
function refreshLine() {
//根据城市的id值,获取其下拉的值,定义一个code来传值
//根据id,取得页面的值,需要在其id前加#
var code = $('#city option:selected').val();//Jquery获取选中的值
var lineDrop = $('#lineDrop');
var lineDrop1 = $('#lineDrop1');
var temp_html;
//post请求数据,$.post('url',{'参数1':XXX,'参数2':XXX},'成功加载后执行函数:function(result)')
$.post('/gj/gj/application/gjOnlineApplication.do?action=getLineListByCode',{'code':code},function(result){
//遍历获取到数据
var lineInfo = $.each(result.lineName,function(i, lineInfo){
temp_html+="<option value='"+lineInfo.uuid+"'>"+lineInfo.lineName+"</option>";
});
//将信息显示在页面之中
lineDrop.html(temp_html);
lineDrop1.html(temp_html)
})
}
gjOnlineApplication后台中获取城市所对应的所有下拉信息;
首先需要将前天传来的值接收到,添加code对象,添加其set和get方法。
//前台传递过来的城市下拉值
private String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
然后在获取城市对应的所有线路信息。
public String getLineListByCode() {
QueryParamList params = new QueryParamList();
params.addParam("cityCode",code);
List<GjBusLine> lists = gjBusLineService.retrieve(params, null, null, null, null);
List<Map<String,Object>> lineList = new ArrayList<Map<String, Object>>();
for(int i=0;i<lists.size();i++){
//定义一个map类型数据,先将数据put进map之中,然后将线路信息添加至list之中;
Map<String,Object> map = new HashMap<String, Object>();
//将线路的主键给下拉的label
map.put("uuid",lists.get(i).getUuid() );
//将线路的名称给下拉的value
map.put("lineName", lists.get(i).getLineName());
//将该条线路信息添加至list之中
lineList.add(map);
}
//将lineName值取到,然后返回给前台
result.put("lineName",lineList);
//返回json形式的数据
return "resultData";
}
该action类为数据接口,里面涉及到许多接口,其数据是以json形式返回,其形式:
@Namespace("/gj/application")
@ParentPackage("framework-default")
@Action(value = "/gjOnlineApplication", results = {@Result(name="input",location="gjonlineapplication.jsp"),
@Result(name="resultData",type = "json", params = {"root", "result" })})
//上面action当中,定义了后台的地址以及返回的结果。
public class GjOnlineApplicationAction extends GjCommonAction {
//根据前台的action地址进入action
@Override
public String execute() throws Exception {
if("getLineListByCode".equals(action)){
return this.getLineListByCode();
}
return super.execute();
}
}
线路名称的select添加id,因为要获取到下拉的值,通过id来获取其值。这里还有一个onchange()事件,是当选择下拉以后,调用后台接口,返回一个该线路的信息,比如该线路的长度等。
<div class="tab-pane item-list">
<div class="item-list-title">
<span class="tit"><i class="decorate"></i>公共汽电车运营线路长度</span>
<span class="line"></span>
</div>
<div class="item-list-body">
<div class="input-group">
<label>线路名称:</label>
<select id="lineDrop1" onchange="lineDrop1()">
</select>
</div>
<div class="input-group">
<label>线路长度(km):</label>
<input name="upMiler" onchange="yyxlcd()" type="text">
</div>
<div class="input-group">
<label>线路宽度(km):</label>
<input name="downMiler" onchange="yyxlcd()" type="text">
</div>
<div class="input-group">
<label>计算结果(长宽比例):</label>
<input name="yyxlcd" type="text" disabled>
</div>
</div>
<div class="item-list-bottom">
<p>这里是相关计算说明。</p>
</div>
</div>
根据线路名称,获取线路的信息,通过线路下拉的onchange()事件来触发:
function lineDrop1(){
//通过id获取线路下拉的值
var lineDrop1 = $('#lineDrop1 option:selected').val();
//通过name值来获取线路长度信息
//后面还可拼接,类似and方式,eg:$('input[name='xxx'][type=text][type=checkbox]'),无需加#
var upMiler1 = $('input[name=upMiler][type=text]');
//通过name值获取线路宽度信息
var downMiler1 = $('input[name=downMiler][type=text]');
//定义计算结果的text,计算比例
var upDownMiler1 = $('input[name=upDownMiler][type=text]');
$.post('/gj/gj/application/gjOnlineApplication.do?action=getBusLineUp',{'lineDrop1':lineDrop1},function(result){
//获取后台的值.val(result.BusLineUp)
upMiler1.val(result.BusLineUp);
downMiler1.val(result.BusLineDown);
upDownMiler1.val(Number(upMiler1.val())+Number(downMiler1.val()));
$('input[name=yyxlcd][type=text]').val((Number(upMiler1.val())+Number(downMiler1.val())+Number(upDownMiler1.val()))/2);
})
}
后台action,首先需要定义lineDrop1来接收线路下拉传递的值。
//线路下拉传递的值
private String lineDrop1;
public String getLineDrop1() {
return lineDrop1;
}
public void setLineDrop1(String lineDrop1) {
this.lineDrop1 = lineDrop1;
}
然后根据前台post请求的action方法,通过接口获取值。
//线路信息
public String getBusLineUp(){
GjBusLine gjBusLine = gjBusLineService.retrieve(lineDrop1);
BigDecimal a=GisCaclUtil.getBusLineUp(gjBusLine.getLineCode());
BigDecimal b=GisCaclUtil.getBusLineDown(gjBusLine.getLineCode());
//将线路长度添加至json格式的数据中
result.put("BusLineUp", a);
//将线路宽度添加至json格式的数据中
result.put("BusLineDown", b);
//返回json格式的数据
return "resultData";
}
这时候,通过前天的方法即可获取到值:
$.post('/gj/gj/application/gjOnlineApplication.do?action=getBusLineUp',{'lineDrop1':lineDrop1},function(result){
//获取线路长度的值
upMiler1.val(result.BusLineUp);
//获取线路宽度的值
downMiler1.val(result.BusLineDown);
//计算结果
$('input[name=yyxlcd][type=text]').val((Number(upMiler1.val())+Number(downMiler1.val())+Number(upDownMiler1.val()))/2);
})
//这里之前遇到一个问题,后台接口传值可能速度很慢,然后前台直接就会执行计算结果那个函数,这时候因为没有线路的长度和宽度,所以无法计算结果,会显示NaN;添加一个定时器即可解决问题。
window.setTimeout("xlwmd()",1000);
function yyxlcd (){
upMiler = upMilerDom.val();
downMiler = downMilerDom.val();
$('input[name=yyxlcd][type=text]').val((Number(upMiler)+Number(downMiler)+Number(upDownMiler))/2);
}
功能测试
想要查看action执行的结果,如何操作呢?
首先登录该程序或项目,然后在浏览器地址栏输入该action地址:
//无传递参数
http://localhost:8080/gj/gj/simulation/gjOnlineApplication.do?action=getLineListByCode
//传递参数
http://localhost:8080/gj/gj/simulation/gjOnlineApplication.do?action=getLineListByCode&code=2&linecode=1
至此,该部分所有功能均已实现。
要做一个爱学习,并勤于记录的程序员,有时候,发现很多东西,是没有接触过,所以不会,也有很多东西不会,是因为做的太少所以不会,所以,经常去浏览各大博客,亦或对已经写过的代码做一记录,慢慢会积累起来的。
不积跬步无以至千里,不积小流无以成江河!!!!!!!
码一次前后台post请求交互,以及接口的使用,json数据格式的传递的更多相关文章
- Requests库发送post请求,传入接口参数后报JSON parse error
报错信息: {"timestamp":"2020-01-08T14:42:40.894+0000","status":400,"e ...
- DICOM医学图形处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求(续)
转载:http://blog.csdn.net/zssureqh/article/details/39237649 背景: 上一篇博文中,在对storescp工具源文件storescp.cc和DcmS ...
- DICOM医学图像处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求
转载:http://blog.csdn.net/zssureqh/article/details/39213817 背景: 上一篇专栏博文中针对PACS终端(或设备终端,如CT设备)与RIS系统之间w ...
- JMeter基于http请求的web接口性能测试总结
[本文出自天外归云的博客园] 基于http请求的web接口性能测试总结 压测的目的:对于Web接口压测的目的最终是要在对数据库造成压力的情况下观察压测服务器的cpu是否达到预警值.memory是否发生 ...
- $Django ajax简介 ajax简单数据交互,上传文件(form-data格式数据),Json数据格式交互
一.ajax 1 什么是ajax:异步的JavaScript和xml,跟后台交互,都用json 2 ajax干啥用的?前后端做数据交互: 3 之前学的跟后台做交互的方式: -第一种:在浏览器 ...
- ajax请求node.js接口时出现 No 'Access-Control-Allow-Origin' header is present on the requested resource错误
ajax请求node.js接口出现了如下的错误: XMLHttpRequest cannot load http://xxx.xxx.xx.xx:8888/getTem?cityId=110105&a ...
- java后台调用HttpURLConnection类模拟浏览器请求(一般用于接口调用)
项目开发中难免遇到外部接口的调用,小生今天初次接触该类,跟着API方法走了一遍,如有不对的地方,还请哆哆指正,拜谢! 1 package com.cplatform.movie.back.test; ...
- 用javascript向一个网页连接接口发送请求,并接收该接口返回的json串
一般前端与后端的互交都是通过json字符串来互交的,我的理解就是与网页接口的来回数据传递采用的数据结构就是json.一般是这样. 比如后端的代码是这样的: @RequestMapping(value ...
- 使用AFNetworking请求新浪微博数据接口出错解决办法
在使用AFNetworking请求新浪微博数据接口时会出这样的错误,如 这样的错误说明,AFNetworking无法处理这样的数据格式.所以,我们需要修改AFNetworking中的一些接收数据格式. ...
随机推荐
- 学习笔记之Python人机交互小项目一:名字管理系统
2020是一个不平凡的一年,但即使挫折不断,我们每学期的课程实训也没有受到影响,仍旧如期实施.与往年不同的是,今年的实训老师是学校邀请的公司在职人员来给我们实训.今年实训的内容是Python语言,下面 ...
- Linux 下 swap 分区及作用详解
我们在安装系统的时候已经建立了 swap 分区.swap 分区是 Linux 系统的交换分区,当内存不够用的时候,我们使用 swap 分区存放内存中暂时不用的数据.也就是说,当内存不够用时,我们使用 ...
- day119:MoFang:宠物的状态改动&宠物粮道具的使用&宠物死亡处理
目录 1.宠物的状态改动 2.宠物粮道具的使用 3.宠物死亡处理 1.宠物的状态改动 1.在setting表中为每个宠物配置生命周期时间 因为宠物有多个,每个宠物会有不同的初始生命的饥饿时间,所以我们 ...
- Java 使用线程池执行若干任务
在执行一系列带有IO操作(例如下载文件),且互不相关的异步任务时,采用多线程可以很极大的提高运行效率.线程池包含了一系列的线程,并且可以管理这些线程.例如:创建线程,销毁线程等.本文将介绍如何使用Ja ...
- gin框架的路由源码解析
前言 本文转载至 https://www.liwenzhou.com/posts/Go/read_gin_sourcecode/ 可以直接去原文看, 比我这里直观 我这里只是略微的修改 正文 gin的 ...
- Go GRPC 入门(二)
前言 最近较忙,其实准备一篇搞定的 中途有事,只能隔了一天再写 正文 pb.go 需要注意的是,在本个 demo 中,客户端与服务端都是 Golang,所以在客户端与服务端都公用一个 pb.go 模板 ...
- SpringBoot2.+restful风格请求方式设置以及表单中日期格式设置
1).SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean.@Component)如果有就用用户配置的,如果没有,才自动配置:如果有些组件可以有多个(ViewR ...
- Azure 存储简介
Azure Storage Account(存储账户)包含所有Azure Storage的数据对象,包括Blob.Data Lake Gen2,File.Queue.Disk和Table等服务,该St ...
- 记汉化zabbix后图形界面没有任何汉字的问题
1.安装并汉化后zabbix,所有的图形界面都没有任何字图,如下图 2.郁闷不已,去/var/www/html/zabbix/fonts目录下面查看,发现之前上传字体的文件名后缀是.ttc,猜着一般见 ...
- mastercam2018安装教程
安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文. [安装环境]:Win7/Win8/Win10 1.选中[Mastercam2018]压缩包,鼠标右击选择[解压到Ma ...