天天看點

java spring mvc ajax_springmvc與Ajax互動

Jsp頁面:

需要引入jquery-1.10.2.min.js、json2.js、jquery.json-2.3.js三個檔案

java spring mvc ajax_springmvc與Ajax互動

errorPage=""%>

springmvc與Ajax互動

使用者資訊

姓名:     *
性别:    

請選擇

selected = "selected">

${sexItem.text}

*

年齡:     *
郵箱:     *
電話:    

size="25" value="${User.user_telephone }" />

*

學曆:    

請選擇

selected = "selected">

${educationItem.text}

*

職稱:    

請選擇

selected = "selected">

${titleItem.text}

*

所屬部門:    

請選擇

selected = "selected">

${deptItem.dept_name}

*

value="${User.id}"

value="0"

/>

java spring mvc ajax_springmvc與Ajax互動

頁面效果:

java spring mvc ajax_springmvc與Ajax互動

添加一個通用方法,用于将一個表單的資料傳回成JSON對象

java spring mvc ajax_springmvc與Ajax互動

//将一個表單的資料傳回成JSON對象

$.fn.serializeObject = function() {

var o = {};

var a = this.serializeArray();

$.each(a, function() {

if (o[this.name]) {

if (!o[this.name].push) {

o[this.name] = [ o[this.name] ];

}

o[this.name].push(this.value || '');

} else {

o[this.name] = this.value || '';

}

});

return o;

};

java spring mvc ajax_springmvc與Ajax互動

1.post方式送出Form表單,背景JavaBean接收

java spring mvc ajax_springmvc與Ajax互動

//送出Form表單

$("#btn1").click(function() {

var jsonuserinfo = JSON.stringify($('#form1').serializeObject());

alert(jsonuserinfo);

$.ajax({

type : 'POST',

contentType : 'application/json',

url : '/User/addUserInfo',

data : jsonuserinfo,

dataType : 'json',

success : function(data) {

alert("新增成功!");

},

error : function(data) {

alert("error")

}

});

});

java spring mvc ajax_springmvc與Ajax互動

背景方法:

java spring mvc ajax_springmvc與Ajax互動

@RequestMapping(value="/addUserInfo",method=RequestMethod.POST)

@ResponseBody

public String addUserInfo(@RequestBody User user){

System.out.println("user_name--------"+user.getUser_name());

System.out.println("user_sex--------"+user.getUser_sex());

System.out.println("user_age--------"+user.getUser_age());

System.out.println("user_email--------"+user.getUser_email());

System.out.println("user_title--------"+user.getUser_title());

System.out.println("user_education--------"+user.getUser_education());

System.out.println("user_telephone--------"+user.getUser_telephone());

return "{}";

}

java spring mvc ajax_springmvc與Ajax互動

注:(1)JSON.stringify(jsonobj) 方法用于将Json對象轉換成一個Json字元串,相反,如果将一個Json字元串轉換成Json對象,可以用JSON.parse(str) 得到。

java spring mvc ajax_springmvc與Ajax互動

//需引入json2.js檔案

//Json字元串轉Json對象

var str = '{"name": "lxx", "age": "30"}';

var obj = JSON.parse(str); //或者用$.parseJSON(str);也可以

alert(obj.name);

//Json對象轉Json字元串

var obj1={"name":"zhangsan","age":"25"};

alert(JSON.stringify(obj1));

java spring mvc ajax_springmvc與Ajax互動

(2)@RequestBody接收的是一個Json對象的字元串,而不是一個Json對象,是以前台在傳遞資料的時候要将Json對象轉換成Json字元串。

(3)Jquery ajax請求中有個dataType參數,作用是預期伺服器傳回的類型。如果設定為json,就要傳回json格式的資料,而伺服器傳回空的話就會報ParseError,也就是說不能傳回"",而要傳回"{}"。

(4)form表單中控件的name屬性要和JavaBean中的屬性名稱一緻,如果有不一緻的話就不會送出成功。另外指派的時候要和JavaBean中字段的資料類型一緻,例如年齡為int型,你在前台輸了個字元串,也不會送出成功。

2.post方式送出Form表單,另一種方法

其實和上面的方法差不多,不同的就是上面方法中Json對象是通過serializeObject()方法建立的,而下面的方法中Json對象是我們根據json資料格式自己建構的。在送出的時候都需要轉換成Json字元串,因為背景是通過@RequestBody接收。

java spring mvc ajax_springmvc與Ajax互動

//送出Form表單,另一種方式

$("#btn2").click(function(){

var url='/User/addUserInfo';

var data={"user_name":$("#userName").val(),"user_sex":$("#userSex").val(),"user_age":$("#userAge").val(),

"user_email":$("#userEmail").val(),"user_telephone":$("#userTelephone").val(),"user_education":$("#userEducation").val(),

"user_title":$("#userTitle").val()};

$.ajax({

type:'POST',

contentType : 'application/json',

url:url,

dataType:"json",

data:JSON.stringify(data),

async:false,

success:function(data){

alert("新增成功!");

},

error: function(XMLHttpRequest, textStatus, errorThrown){

alert(XMLHttpRequest.status);

alert(XMLHttpRequest.readyState);

alert(textStatus);

}

})

})

java spring mvc ajax_springmvc與Ajax互動

背景方法和上面的一緻。

3.post方式送出多個對象,背景用List接收

java spring mvc ajax_springmvc與Ajax互動

//送出多個對象

$("#btn3").click(function(){

var url='/User/saveUserInfo';

var saveDataAry=[];

var data1={"user_name":"zhangsan","user_age":"25","user_email":"[email protected]"};

var data2={"user_name":"lisi","user_age":"26","user_email":"[email protected]"};

saveDataAry.push(data1);

saveDataAry.push(data2);

$.ajax({

type:'POST',

contentType : 'application/json',

url:url,

dataType:"json",

data:JSON.stringify(saveDataAry),

async:false,

success:function(data){

alert("送出成功!");

},

error: function(XMLHttpRequest, textStatus, errorThrown){

alert(XMLHttpRequest.status);

alert(XMLHttpRequest.readyState);

alert(textStatus);

}

})

})

java spring mvc ajax_springmvc與Ajax互動

背景方法:

java spring mvc ajax_springmvc與Ajax互動

@RequestMapping(value = "/saveUserInfo", method = RequestMethod.POST)

@ResponseBody

public String saveUserInfo(@RequestBody List users) {

if(users!=null && users.size()>0){

for(int i=0;i

System.out.println("user_name--------"+users.get(i).getUser_name());

System.out.println("user_age--------"+users.get(i).getUser_age());

System.out.println("user_email--------"+users.get(i).getUser_email());

}

}

return "{}";

}

java spring mvc ajax_springmvc與Ajax互動

4.get方式傳參,并且背景傳回map資料

java spring mvc ajax_springmvc與Ajax互動

//get方式

$("#btn4").click(function(){

$.ajax( {

type : 'GET',

contentType : 'application/json',

url : '/User/list',

dataType : 'json',

data:'id=111&str=abc',

success : function(data) {

if (data && data.success == "true") {

alert("共" + data.total + "條資料。");

$.each(data.data, function(i, item) {

alert("姓名:" + item.user_name + ",年齡:" + item.user_age

+ ",性别:" + item.user_sex);

});

}

},

error : function() {

alert("error")

}

});

})

java spring mvc ajax_springmvc與Ajax互動

背景方法:

java spring mvc ajax_springmvc與Ajax互動

@RequestMapping(value = "/list", method = RequestMethod.GET)

@ResponseBody

public Map list(@RequestParam(value="id") String id,@RequestParam(value="str") String str) {

List list = new ArrayList();

User um = new User();

um.setUser_name("zhangsan");

um.setUser_age(25);

um.setUser_sex("男");

list.add(um);

Map modelMap = new HashMap(3);

modelMap.put("total", "1");

modelMap.put("data", list);

modelMap.put("success", "true");

return modelMap;

}

java spring mvc ajax_springmvc與Ajax互動

5.post方式傳參,背景通過@RequestParam接收,并傳回List

java spring mvc ajax_springmvc與Ajax互動

//post傳參,方式一

$("#btn5").click(function(){

var data={"user_id":"111","user_name":"abc","user_email":"[email protected]"};

$.ajax({

url:'/User/loadData',

type:'POST',

//data也可設定成"user_id=111&user_name=abc&[email protected]"這種方式

data:data,

//contentType : 'application/json',

//傳回List或Map,dataType要設定為“json”.

dataType:'json',

success:function(data){

$(data).each(function (i, value) {

alert(value);

});

},

error : function() {

alert("error")

}

})

})

java spring mvc ajax_springmvc與Ajax互動

背景方法:

java spring mvc ajax_springmvc與Ajax互動

@RequestMapping(value="/loadData")

@ResponseBody

public List loadData(@RequestParam(value="user_id") int user_id,@RequestParam(value="user_name") String user_name,

@RequestParam(value="user_email") String user_email){

System.out.println(user_id);

System.out.println(user_name);

System.out.println(user_email);

List list=new ArrayList();

list.add("電視");

list.add("空調");

list.add("電冰箱");

return list;

}

java spring mvc ajax_springmvc與Ajax互動

6.post方式傳參,背景通過request.getParameter接收

java spring mvc ajax_springmvc與Ajax互動

//post傳參,方式二

$("#btn6").click(function(){

var data={"user_id":"111","user_name":"abc","user_email":"[email protected]"};

$.ajax({

url:'/User/loadData1',

type:'POST',

data:data,

//contentType : 'application/json',

//隻傳回一個字元串,dataType要設定為“html”.

dataType:'html',

success:function(data){

alert(data);

},

error : function() {

alert("error")

}

})

})

java spring mvc ajax_springmvc與Ajax互動
java spring mvc ajax_springmvc與Ajax互動

@RequestMapping(value="/loadData1")

@ResponseBody

public String loadData1(HttpServletRequest request,HttpServletResponse response){

String user_id=request.getParameter("user_id");

String user_name=request.getParameter("user_name");

String user_email=request.getParameter("user_email");

String result="success";

return result;

}

java spring mvc ajax_springmvc與Ajax互動

注意ajax的dataType要設定為html,因為背景傳回的是字元串,不是json資料。

7.post方式傳參,背景通過JavaBean接收

java spring mvc ajax_springmvc與Ajax互動

//post傳參,方式三

$("#btn7").click(function(){

var data=$("#form1").serialize();

//data可以有三種形式:

//1.var data={"id":"111","user_name":"abc","user_email":"[email protected]"};

//2.vat data="id=111&user_name=abc&[email protected]";

//3.var data=$("#form1").serialize();

alert($("#form1").serialize());

$.ajax({

url:'/User/loadData2',

type:'POST',

data:data,

//contentType : 'application/json',

//傳回List或Map,dataType要設定為“json”.

dataType:'json',

success:function(data){

$(data).each(function (i, value) {

alert(value);

});

},

error : function() {

alert("error")

}

})

})

java spring mvc ajax_springmvc與Ajax互動

背景方法:

java spring mvc ajax_springmvc與Ajax互動

@RequestMapping(value="/loadData2")

@ResponseBody

public List loadData2(User user){

System.out.println(user.getId());

System.out.println(user.getUser_name());

System.out.println(user.getUser_email());

List list=new ArrayList();

list.add("電視");

list.add("空調");

list.add("電冰箱");

return list;

}

java spring mvc ajax_springmvc與Ajax互動

8.post方式送出參數,背景map接收

java spring mvc ajax_springmvc與Ajax互動

$("#btn8").click(function() {

var jsonuserinfo = JSON.stringify($('#form1').serializeObject());

alert(jsonuserinfo);

$.ajax({

type : 'POST',

contentType : 'application/json',

url : '/User/addUserInfo1',

data : jsonuserinfo,

dataType : 'json',

success : function(data) {

alert("新增成功!");

},

error : function(data) {

alert("error")

}

});

});

java spring mvc ajax_springmvc與Ajax互動

背景方法:

java spring mvc ajax_springmvc與Ajax互動

@RequestMapping(value="/addUserInfo1",method=RequestMethod.POST)

@ResponseBody

public String addUserInfo1(@RequestBody Map map){

Iterator it=map.keySet().iterator();

while(it.hasNext()){

String key=(String)it.next();

System.out.println(key+"----"+map.get(key));

}

return "{}";

}

java spring mvc ajax_springmvc與Ajax互動

總結:

1.springmvc與Ajax互動,可以傳入三種類型的資料:

(1)文本:"uname=alice&mobileIpt=110&birthday=1983-05-12"或通過$("#form1").serialize()方法,背景可通過@RequestParam注解或request.getParameter接收或JavaBean接收。

(2)json對象:{uanme:'vic',mobileIpt:'110',birthday:'2013-11-11'},如果背景用@RequestBody注解接收的話,前台需要将參數由Json對象轉換成Json對象的字元串,如果不用@RequestBody注解接收,那麼參數就不用轉成Json字元串了,背景可通過@RequestParam注解或request.getParameter接收或JavaBean接收。

(3)json數組:[{"name":"uname","value":"alice"},{"name":"mobileIpt","value":"110"},{"name":"birthday","value":"2012-11-11"}]

前台需要将Json對象轉換成Json對象的字元串,背景通過@RequestBody注解接收。

2.背景傳回資料的話,如果傳回List或Map的話,ajax的dataType要設定成"json",如果傳回的是字元串,dataType要設定成"html"。

3.其實提取表單資料的話隻需要serialize()方法直接擷取就可以了。

serialize()方法

格式:var data = $("form").serialize();

功能:将表單内容序列化成一個字元串。

這樣在ajax送出表單資料時,就不用一一列舉出每一個參數。隻需将data參數設定為 $("form").serialize() 即可。參數形式為:"uname=alice&mobileIpt=110&birthday=1983-05-12"

4.特别注意在給表單指派時,要和背景方法的參數或JavaBean中的屬性的資料類型一緻,不然的話會報錯,最好在前台加校驗。我犯的一個錯誤是表單中年齡這個字段,我沒輸入值,這樣送出到背景為空,但是JaveBean中age為int型,是以不比對,送出一直不成功,後來在頁面中輸入數值就可以了。