SpringMVC ajax傳值問題


 

 

AJAX前端請求數據處理

SpringMVC后台接受請求數據

SpringMVC對返回給前端數據處理

AJAX前端處理后台返回的數據

 

注意點:

1.ajax提交的參數說明

Datatype:

預期服務器返回的數據類型。如果不指定,jQuery將自動根據

HTTP包MIME信息來智能判斷

"json": 返回 JSON 數據

"text": 返回純文本字符串

ContentType:

默認值: "application/x-www-form-urlencoded"。發送信息至服務器時內容編碼類型。

Async:

默認值: true。默認設置下,所有請求均為異步請求。如果需要發送同步請求,請將此選項設置為 false。

Success:

請求成功后的回調函數。Function(a,b,c)有3個形參,a是返回的數據,b是”success”,c未知。形參的數目可以任意填寫,按順序加載實參

 

2.使用@ResponseBody注解的同時要導入

  jackson-core-asl-1.8.8.jar

  Jackson-mapper-asl-1.8.8.jar

該注解的功能才會生效

 

方式1:

ajax數據為url后綴的格式

 

注意:

這種方式,

提交方式使用POST時

contentType: "application/json; charset=utf-8",后台無法獲取值

contentType:"application/x-www-form-urlencoded",后台可以獲取值

當提交方式使用get時

兩者都可以獲取值

 

前台:

function ajaxTest1(){ 

     $.ajax({ 

     data:"name=小紅&age=12", 

     type:"POST", 

     dataType: 'json', 

     url:"ajax/test1", 

     success:function(data){ 

        alert("success");

        alert(data.name);

        alert(data.age);

      },

     error:function(data){ 

         alert("fail"); 

     }

}); 

 

后台:

@RequestMapping(value="ajax/test1") 

    public @ResponseBody Map<String,Object> login1(HttpServletRequest     request,HttpServletResponse response) throws IOException{ 

        System.out.println(request.getParameter("name")); 

        System.out.println(request.getParameter("age"));

        Map<String,Object> map = new HashMap<String,Object>(); 

        map.put("name",request.getParameter("name")); 

        map.put("age",request.getParameter("age"));

        return map; 

}

 

 

方式2:

Ajax數據為json格式

注意:

這種方式,

提交方式使用POST時

contentType: "application/json; charset=utf-8",后台無法獲取值

contentType:"application/x-www-form-urlencoded",后台可以獲取值。且中文不亂碼

當提交方式使用get時

兩者都可以獲取值,但是中文亂碼

 

前台:

 function ajaxTest2(){ 

  

        $.ajax({ 

        data:{"name":"小紅","age":21},

        type:"POST", 

        dataType: 'json',

        url:"ajax/test2", 

        success:function(data){ 

          alert("success");

          alert(data.name);

          alert(data.age);

        },

         error:function(data){ 

            alert("fail"); 

        }

        }); 

    } 

 

后台:

    @RequestMapping(value="ajax/test2") 

    public @ResponseBody Map<String,Object> login2(HttpServletRequest     request,HttpServletResponse response) throws IOException{ 

        System.out.println(request.getParameter("name")); 

         System.out.println(request.getParameter("age"));

         Map<String,Object> map = new HashMap<String,Object>(); 

         map.put("name",request.getParameter("name")); 

         map.put("age",request.getParameter("age"));

         return map; 

 

方式3:

Ajax數據為json轉字符串

 

注意:

1.前台json數據的key必須和后台bean對應

所以以下清空會報錯

var data = {"name":"小紅","age":12,"sex":"女"};

var data = {"name":"小紅","sex":"女"};

前台的json數據中key可以缺省

所以以下情況正確

var data = {"name":"小紅"};

2.@RequestBody 不需要導入額外的jar包

3.contentType必須聲明為"application/json;charset=utf-8",不然會報錯

 

 

前台:

 function ajaxTest3(){ 

       var data = {"name":"小紅","age":12};

       $.ajax({

         url: "ajax/test3",

         data: JSON.stringify(data),

         contentType: "application/json;charset=utf-8",

         type: "POST",

         success:function(data){ 

          alert("success");

          alert(data.name);

          alert(data.age);

        },

         error:function(data,b,c){ 

            alert("fail"); 

            alert(b);

        }

       });

  } 

 

 

后台:

@RequestMapping(value="ajax/test3") 

    public @ResponseBody Person  login3(@RequestBody  Person aa ) throws IOException{       

       System.out.println(aa);

        return aa;   

}

 

自定義一個Person類:

public class Person {

     private String name;

     private int age;

     public String getName() { return name;    }

     public void setName(String name) { this.name = name;    }

     public int getAge() { return age;    }

     public void setAge(int age) { this.age = age;    }

 

方式4:

后台使用hashmap接受前段的值

 

方式5:

后台不使用@Respone自動轉換json數據,而使用respone,write方法寫入


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM