• springMVC 中 ajax get 请求和 post 请求的坑以及参数传递


    1, ajax 请求 无论为 post ,或者 get ,url中带有?形式的参数,后台都能以String类型变量接收,变量名称和参数名称必须一致

    前台ajax:

    $.ajax(

    "productForm?loginname2=jichen",// 发送请求的URL字符串。
    {
    dataType : "JSON", // 预期服务器返回的数据类型。如果服务器返回不一致,报 parseError
    type : "post" 或者 “get”, // 请求方式 POST或GET
    contentType:"application/json;charset=UTF-8", // 发送信息至服务器时的内容编码类型

    。。。

    });

    后台springMVC:

    @RequestMapping(value="/productForm")
    @ResponseBody(这个注解意味着这个方法的返回值不是页面名称,而是同一次请求的返回体(也就是服务器返回给客户端的数据))
    public String ProductPost(String loginname2){
                                            (此处必须和前台传的参数名称一致)


    System.out.println(loginname2);打印的值就是 jichen

    }

    2,ajax 请求 为 post , contentType 必须为 "application/json;charset=UTF-8",data 必须用 JSON.stringify 格式化: JSON.stringify({id : 1}),则后台可以用 Map 类型的@RequestBody Map data 来接收,缺一不可;

    前台ajax:

    $.ajax(

    "productForm?loginname2=jichen",// 发送请求的URL字符串。
    {
    type : "post", 
    contentType:"application/json;charset=UTF-8", // 发送信息至服务器时的内容编码类型,如果不加 charset,则中文传到后台为乱码

    // 发送到服务器的数据。
    data:JSON.stringify({id : 1, loginname : "Spring MVC企业应用实战"})

    }

    后台springMVC:

    @RequestMapping(value="/productForm")
    @ResponseBody(这个注解意味着这个方法的返回值不是页面名称,而是同一次请求的返回体(也就是服务器返回给客户端的数据))
    public String ProductPost(String loginname2,@RequestBody Map data){
                                           

    System.out.println(data.get("loginname"));打印出来 Spring MVC企业应用实战


    }

    ,ajax 请求 为 get,data 不能用 JSON.stringify 格式化: JSON.stringify({id : 1}),可以直接传一个对象:{id : 1},如果传的是一个对象,则相当于给 url 加?形式的参数 productForm?id=1 ,如果用 JSON.stringify 格式化,报错

    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

     还有,如果为 get 请求,则后台 springMVC 不能用 @RequestBody注解,因为http 1.1协议不支持,如果使用,报错

    Required request body is missing

    前台ajax:

    $.ajax("productForm?loginname=jichen",// 发送请求的URL字符串。
    {
    dataType : "JSON", // 预期服务器返回的数据类型。如果服务器返回不一致,报 parseError
    type : "get", 

    // 发送到服务器的数据。

    data:{id : 1, loginname : "Spring MVC企业应用实战",auto:123}

    }

    后台springMVC:

    @RequestMapping(value="/productForm")
    @ResponseBody(这个注解意味着这个方法的返回值不是页面名称,而是同一次请求的返回体(也就是服务器返回给客户端的数据))
    public String ProductPost(String loginname){
                                           

    System.out.println(data.get("loginname"));打印出来 jichen,Spring MVC?????(使用?方式传参,中文为乱码


    }

    4,如果把 3 的 type 改为 post,contentType 不能写 application/json (可直接省略,如果写成 application/json ,则data 对象传不到后台), data传的是对象{id : 1, loginname : "Spring MVC企业应用实战",auto:123},其它不变,则还是相当于给url带参,?id=1&auto=123.。。。,但是,传到后台的中文不是乱码,神奇!

    5,后台接收前台传递的参数的方式

    (1)直接用

    后台springMVC:

    @RequestMapping(value="/productForm")
    @ResponseBody(这个注解意味着这个方法的返回值不是页面名称,而是同一次请求的返回体(也就是服务器返回给客户端的数据))
    public String ProductPost(String loginname){
                                           

    System.out.println(data.get("loginname"));打印出来 jichen,Spring MVC?????(使用?方式传参,中文为乱码)

    }

  • 相关阅读:
    基本數據類型
    5月28号 垃圾回收机制
    5月28 基本运算符
    5月30日 循环之while循环
    5月28号 与用户交互
    5月31日 基本数据类型(列表类型 字典类型 元组)及其内置方法
    5月30号 基本数据类型(整数型 字符串类型)及其内置方法
    變量
    5月29日 学习笔记 可变不可变类型 成员运算符和身份运算符 条件 流程控制之if判断
    关于Flash CS4字体不能加粗的问题[附解决方法]
  • 原文地址:https://www.cnblogs.com/jichen/p/8295830.html
Copyright © 2020-2023  润新知