Spring MVC 结合jQuery实现AJAX

做前端几年了,很久没有写java后端代码,最近学习了下spring mvc ,用jquery结合起来还比较好用。

不说废话,大体把代码贴出来,希望对大家有启发。有繁杂的地方大家提出,一起进步。


前端 jquery调用点击 btn1点击触发按钮事件,序列form1中的数据发送一个post请求

<h3>填写资料,立即报名</h3>
 <form method="post" action="/activity/saveActivityIndividual" class="form1">
  <h3>个人报名</h3>
  <p> 姓名:<input type="text" name="name" /></p>
  <p> 性别: <input type="text" name="sex" /></p>
  <p> 星座:<input type="text" name="constellation" /></p>
  <p> 电话: <input type="text" name="telephoneNumber" /></p>
  <input type="button" value="Submit" class="btn1" />
</form>


 	$(".btn1").on("click",function(){
 	 	var json1 = $(".form1").serialize();
 		$.ajax({
		url:"/activity/saveActivityIndividual?format=json",
		type: "POST",
		data:json1,
		success: function(data, textStatus){
		     alert(data.scode); // 1 success  -1 error
		},
		error: function(data){ 
              alert("Connection error");
        }
		});
 	});

后端 接受参数用 params = "format=json" 是否有参数format ="json"和produces = "application/json"请求头是否是application/json 来判断是否是一个json请求

JsonPackageWrapper用来存储返回的json对象,JsonPackageWrapper 我这里使用的是org.codehaus.jackson类库,例子中操作数据库后返回结果。


package com.xiu.portal.web.controller;

import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;


@Controller

@RequestMapping(value = "/activity")
public class ActivityRegistrationController {
	
	private static final XLogger LOGGER = XLoggerFactory.getXLogger(ActivityRegistrationController.class);
	@Autowired
	private ActivityTeamManager activityTeamManager;

	
	@RequestMapping(value = "saveActivityTeam", method = RequestMethod.POST, produces = "application/json", params = "format=json")
    public String saveActivityTeam(ActivityTeam activityTeam, Model model) {
   
        JsonPackageWrapper json = new JsonPackageWrapper();
        try {
        	long numOfPhone = activityTeamManager.findActivityTeamByPhone(activityTeam.getCaptainTelephoneNumber());
            if(numOfPhone <=0){
            	activityTeamManager.addActivityTeam(activityTeam);
            	json.setScode(JsonPackageWrapper.S_OK);
            	json.setSmsg("sucuss");
            }else{
            	json.setScode(JsonPackageWrapper.S_ERR);
                json.setSmsg("phone have used");
            }
        }catch (PortalBaseException e) {
            json.setScode(JsonPackageWrapper.S_ERR);
            json.setSmsg(e.getMessageWithSupportCode());

        } catch (Exception e) {
            json.setScode(JsonPackageWrapper.S_ERR);
            json.setSmsg("system exception");
        }
        model.addAttribute(Constants.JSON_MODEL__DATA, json);
        return "";
    }
	
}

下面说下jsonp

前端,样子和上面差不多,改几个参数

$(".btn1").on("click",function(){
 	 	var json1 = $(".form1").serialize();
 		$.ajax({
		url:"http://192.168.0.2/activity/saveActivityIndividual?format=jsonp&callback=?",
		type: "GET",
		dataType:"jsonp",
		data:json1,
		success: function(data, textStatus){
		     alert(data.scode); // 1 success  -1 error
		},
		error: function(data){ 
              alert("Connection error");
        }
		});
 	});

后端 接受参数用 params =“ format=jsonp” 是否有参数“ format=jsonp” 和produces = "application/javascript"请求头是否是application/json 来判断是否是一个jsonp请求

jsonp的原理其实是请求一个js外链,请求参数只能是get是一个很大的局限,但是在某些场景下比较适合。


package com.xiu.portal.web.controller;

import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;



@Controller

@RequestMapping(value = "/activity")
public class ActivityRegistrationController {
	
	private static final XLogger LOGGER = XLoggerFactory.getXLogger(ActivityRegistrationController.class);

	@Autowired
	private ActivityIndividualManager activityIndividualManager;
	
	@RequestMapping(value = "to",method = RequestMethod.GET)
	public String toActivity(){
		return "pages/activityRegistration/create";
	}
	@RequestMapping(value = "saveActivityTeam", method = RequestMethod.GET, produces = "application/javascript", params = "format=jsonp")
    public String saveActivityTeam(ActivityTeam activityTeam, Model model) {
        // 得以登录用户信息

        JsonPackageWrapper json = new JsonPackageWrapper();
        
try {
        	long numOfPhone = activityTeamManager.findActivityTeamByPhone(activityTeam.getCaptainTelephoneNumber());
            if(numOfPhone <=0){
            	activityTeamManager.addActivityTeam(activityTeam);
            	json.setScode(JsonPackageWrapper.S_OK);
            	json.setSmsg("sucuss");
            }else{
            	json.setScode(JsonPackageWrapper.S_ERR);
                json.setSmsg("phone have used");
            }
        }catch (PortalBaseException e) {
            json.setScode(JsonPackageWrapper.S_ERR);
            json.setSmsg(e.getMessageWithSupportCode());

        } catch (Exception e) {
            json.setScode(JsonPackageWrapper.S_ERR);
            json.setSmsg("system exception");
        }
model.addAttribute(Constants.JSON_MODEL__DATA, json); return ""; }}







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现三级联动的基本思路是通过Ajax技术实现异步请求后端数据,然后动态生成页面元素实现级联效果。下面是一个Spring MVC+JSP实现三级联动的示例代码: 1. 前端JSP页面 ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>三级联动示例</title> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ // 加载省份列表 $.ajax({ url: "${pageContext.request.contextPath}/province", type: "GET", success: function(data){ var provinceList = JSON.parse(data); var html = ""; for(var i=0; i<provinceList.length; i++){ html += "<option value='"+provinceList[i].id+"'>"+provinceList[i].name+"</option>"; } $("#province").html(html); } }); // 根据省份id加载城市列表 $("#province").change(function(){ var provinceId = $(this).val(); $.ajax({ url: "${pageContext.request.contextPath}/city/"+provinceId, type: "GET", success: function(data){ var cityList = JSON.parse(data); var html = ""; for(var i=0; i<cityList.length; i++){ html += "<option value='"+cityList[i].id+"'>"+cityList[i].name+"</option>"; } $("#city").html(html); } }); }); // 根据城市id加载区县列表 $("#city").change(function(){ var cityId = $(this).val(); $.ajax({ url: "${pageContext.request.contextPath}/district/"+cityId, type: "GET", success: function(data){ var districtList = JSON.parse(data); var html = ""; for(var i=0; i<districtList.length; i++){ html += "<option value='"+districtList[i].id+"'>"+districtList[i].name+"</option>"; } $("#district").html(html); } }); }); }); </script> </head> <body> <select id="province"> <option value="">请选择省份</option> </select> <select id="city"> <option value="">请选择城市</option> </select> <select id="district"> <option value="">请选择区县</option> </select> </body> </html> ``` 2. 后端Controller代码 ```java @Controller public class RegionController { @Autowired private RegionService regionService; @RequestMapping(value="/province", method=RequestMethod.GET) @ResponseBody public String getProvinceList(){ List<Province> provinceList = regionService.getProvinceList(); return JSON.toJSONString(provinceList); } @RequestMapping(value="/city/{provinceId}", method=RequestMethod.GET) @ResponseBody public String getCityList(@PathVariable("provinceId") String provinceId){ List<City> cityList = regionService.getCityList(provinceId); return JSON.toJSONString(cityList); } @RequestMapping(value="/district/{cityId}", method=RequestMethod.GET) @ResponseBody public String getDistrictList(@PathVariable("cityId") String cityId){ List<District> districtList = regionService.getDistrictList(cityId); return JSON.toJSONString(districtList); } } ``` 3. Service层代码 ```java @Service public class RegionServiceImpl implements RegionService { @Autowired private RegionDao regionDao; @Override public List<Province> getProvinceList() { return regionDao.getProvinceList(); } @Override public List<City> getCityList(String provinceId) { return regionDao.getCityList(provinceId); } @Override public List<District> getDistrictList(String cityId) { return regionDao.getDistrictList(cityId); } } ``` 4. DAO层代码 ```java @Repository public class RegionDaoImpl implements RegionDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public List<Province> getProvinceList() { String sql = "select province_id, province_name from tb_province"; List<Province> provinceList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Province>(Province.class)); return provinceList; } @Override public List<City> getCityList(String provinceId) { String sql = "select city_id, city_name from tb_city where province_id=?"; List<City> cityList = jdbcTemplate.query(sql, new Object[]{provinceId}, new BeanPropertyRowMapper<City>(City.class)); return cityList; } @Override public List<District> getDistrictList(String cityId) { String sql = "select district_id, district_name from tb_district where city_id=?"; List<District> districtList = jdbcTemplate.query(sql, new Object[]{cityId}, new BeanPropertyRowMapper<District>(District.class)); return districtList; } } ``` 其中Province、City和District是数据实体类,包含id和name两个属性。以上代码只是一个简单示例,实际项目中需要根据具体需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值