跨域獲得JSON樣例,servlet,ajax

跨域問題:前端測試時有CORS 關鍵字的報錯,就是因爲跨域問題,大概的理解一下,就是因爲瀏覽器因爲從一個域名訪問另一個域名,爲安全,不允許訪問,所以需要用特殊的方法來解決這個問題,因爲本人也是初級小白,所以找遍各位大神文章,終於整理出來了一個樣例,可以解決這個問題。

但爲什麼我要解決跨域訪問的問題呢,因爲在學習時,用後端生成JSON數據,想在前端獲得JSON數據,這樣不知道算不算是前後端分離,但這樣確實方便些,但問題也來了,就是在測試時,因爲不是一個開發工具,所以就變成了兩個域名的網站進行訪問,所以就出現在上面的問題。

 

本段爲servlet後端的樣例

package servlet;

import dao.dao_GetData;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author UnMobile
 * @create 2019-06-23 15:36
 */
@WebServlet("/ServletGetData")
public class ServletGetData extends HttpServlet
{
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        //爲了返回的是JSON格式,所以需使用下方的頭設置
        response.setContentType("application/json");

        // 這句話的意思,是讓瀏覽器用 utf8 文本 來解析返回的數據
        //response.setHeader("Content-type", "text/html;charset=UTF-8");
        // 這句話的意思,是告訴servlet用UTF-8轉碼,而不是用默認的ISO8859
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("UTF-8");

        //設置爲跨域獲得JSON所需使用的函數
        String funString = request.getParameter("callback");
        if (funString == null)
        {
            //相當於默認 前端的ajax回調函數爲 callback
            funString = "callback";
        }

        String jsonString = "這就是要返回的JSON字符"
        response.getWriter().println(funString + "(" + jsonString + ")");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        this.doPost(request, response);
    }
}

 

本段爲前端樣例代碼

<!DOCTYPE html>
<html lang="en">

<head>
    <script type="text/javascript" src="/js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
        function getData() {
            var url = "http://127.0.0.1:8080/getdata";
            $.ajax({
                type: "get",
                async: false,
                url: encodeURI(url),
                dataType: "jsonp",
                jsonp: "callback", // 後臺定義的回調函數標識符(一般默認爲:callback)
                jsonpCallback: "jsonCallback", // 自定義的jsonp回調函數名稱(默認爲jQuery自動生成的隨機函數名)
                success: function(data) {
                    console.log(data);
                    console.log(status);
                },
                error: function() {
                    alert('失敗!');
                }
            });
        }

    </script>
</head>

<body>
    <button onclick="getData();">測試跨域獲得JSON數據</button>
</body>

</html>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章