aJax提交——服務端不能用request存儲數據,session存數據客戶端可以接收到


aJax提交與普通提交是兩種迥異的提交方式,這兩種提交方式決定了客戶端與服務端交互時存儲、傳輸數據的方式也不同。

aJax提交,客戶端的請求數據存儲在data中,服務端用request.getParameter("xxx");接收;服務端調用PrintWriter的write或print方法寫出數據至aJax請求的回調函數,回調函數有一個參數data接收服務端寫出的數據。

而普通提交一般是將請求數據存儲在表單中或在請求路徑中,服務端用request.getParameter("xxx");接收;服務端用request、session、application的setAttribute方法存儲數據,然后返回客戶端,客戶端調用request、session、application的getAttribute方法或用EL表達式接收服務端存儲在request、session、application中的數據。

示例:

客戶端:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="/demo/js/jquery-1.11.2.js"></script>
    <script type="text/javascript">
        function   ajaxTest(){
            $.ajax({
                type: "POST",
                url: "/mytest/test",
                data: "name=John&location=Boston",
                success: function(data){
                    alert( "Data Saved: " + data );//獲取服務端寫出的數據
                }
            });
        }

    </script>
</head>
<body>
<a href="/mytest/test" >test</a>
reqArrt:<%=request.getAttribute("tttt")%>&nbsp;sessionAttr:<%=session.getAttribute("tttt")%>
EL:${tttt}
<br>
<input id="test" value="testname" > <input value="ajax" type="button" onclick="ajaxTest();">
</body>
</html>

服務端:注:采用springMVC

package com.shyy.web.controller.anntation;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

/**
 * Created by Administrator on 15-12-6.
 * 測試:1.控制器的方法用request、map、model存儲數據,客戶端頁面用EL/request.getAttribute("tttt")均可獲取。
 * 2.前台用ajax提交,控制器的方法用request、map、model存儲數據,客戶端頁面用EL/request.getAttribute("tttt")均獲取不到數據。
 * 用session.getAttribute("tttt")可獲取存儲在session中的數據。
 */
@Controller
@RequestMapping("/mytest")
public class Test {
    @RequestMapping("/test")
    public void test(HttpServletRequest request,Map<String,Object> map,Model model,HttpServletResponse response) throws IOException {
//        map.put("tttt",8888);//ajax提交--客戶端頁面不可接受到存儲在map中的數據
//        model.addAttribute("tttt",7777);//ajax提交--客戶端頁面不可接受到存儲在model中的數據
//        request.setAttribute("tttt",9999);//ajax提交--客戶端頁面不可接受到存儲在request中的數據
//        request.getSession().setAttribute("tttt",11111);//ajax提交--客戶端頁面可接受到存儲在session中的數據

        //獲取ajax請求的數據
        String name = request.getParameter("name");
        String location = request.getParameter("location");
        PrintWriter writer =  response.getWriter();
        writer.print(name+"; "+location);

//        return "demo/test";//非ajax提交返回客戶端頁面的方式--該方法的返回值要改成String
    }
}

 

此外,如果客戶端用aJax提交,並不能用${pageContext.request.contextPath}獲取根路徑,應該用js的方法(http://www.cnblogs.com/wql025/p/5022725.html)獲取。


免責聲明!

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



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