ajax回调时取request作用域和session作用域的值

1.正常情况,把对象放入request作用域中,返回一个字符型,跳转页面,是可以取到值的。

ajax.jsp:

<%--
  Created by IntelliJ IDEA.
  User: 书山有路勤为径
  Date: 2019/9/17
  Time: 12:40
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    ajax回调时取值问题


      点我执行

 

AjaxController:

package com.controller;
import com.model.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/ajax")
public class AjaxController {
    @RequestMapping("/value")
    public String ajaxQuestion(Model model){
        System.out.println("进来了");
        Student stu = new Student();
        stu.setName("小舞");
        stu.setAge(18);
        stu.setStuNo("35");
        //把stu对象放入request作用域
        model.addAttribute("student",stu);
        return "value";
    }
}

 

value.jsp:

<%--
  Created by IntelliJ IDEA.
  User: 书山有路勤为径
  Date: 2019/9/17
  Time: 12:49
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    


     姓名:${student.name}
学号:${student.stuNo}
年龄:${student.age}

1.1执行前

1.2执行后

ajax回调时取request作用域和session作用域的值_第1张图片

 

2.使用ajax后,无论是保存在request作用域,还是保存在session作用域返回时都取不到值。

使用jquery的ajax前 , 引入jQuery库:

 

ajax.jsp :

<%--
  Created by IntelliJ IDEA.
  User: 书山有路勤为径
  Date: 2019/9/17
  Time: 12:40
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


ajax回调时取值问题


    


      点我执行
姓名:${student.name}
学号:${student.stuNo}
年龄:${student.age}

 

AjaxController :

package com.controller;

import com.model.Student;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import javax.servlet.http.HttpServletResponse;

@SessionAttributes(value = {"student"})
@Controller
@RequestMapping("/ajax")
public class AjaxController {
    @RequestMapping("/value")
    public void ajaxQuestion(Model model, HttpServletResponse response) throws Exception{
        System.out.println("进来了");
        Student stu = new Student();
        stu.setName("小舞");
        stu.setAge(18);
        stu.setStuNo("35");
        //把stu对象放入request作用域
        model.addAttribute("student",stu);
        //Ajax回调
        JSONObject json = new JSONObject();
        json.put("success","取值问题");
        response.getWriter().println(json);
    }
}

2.1 执行前:

ajax回调时取request作用域和session作用域的值_第2张图片

2.2 点击执行

ajax回调时取request作用域和session作用域的值_第3张图片

2.3 执行后,student对象在AjaxController已经保存在了request作用域中(model.addAttribute("student",stu);),甚至也保存在了session作用域中(@SessionAttributes(value = {"student"})),但回调后仍是取不到值的。因为保存在session中了,可以在回调成功的函数里利用window.location.href="http://holcalhost:8080/hotel/jsp/ajax.jsp"  ,来跳转到该界面,可以获取到值,可这就违背了使用ajax的初衷。

ajax回调时取request作用域和session作用域的值_第4张图片

3. 细想了一下,还是把 student对象 放在json里返回,再处理就可以取得值了,改动后的代码如下:

AjaxController :

//Ajax回调
JSONObject json = new JSONObject();
json.put("success",stu);
response.getWriter().println(json);

Ajax.jsp :

alert("ajax");
$.each(jsonObj,function(i,c){
  if(i=="success"){
      $("#name").html(c.name);
      $("#no").html(c.stuNo);
      $("#age").html(c.age);
  }
});

3.1执行前

ajax回调时取request作用域和session作用域的值_第5张图片

3.2点击执行

ajax回调时取request作用域和session作用域的值_第6张图片

3.3执行后

ajax回调时取request作用域和session作用域的值_第7张图片

你可能感兴趣的:(ajax回调时取request作用域和session作用域的值)