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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值