js的跨域問題 和 jQuery的跨域問題


實現跨域請求詳解如下:

域名:Domain Name,又稱網域、網域名城,是由一串用點分割的名字組成的Internet上某一台計算機或計算機組的名稱,用於數據傳輸時標識計算機的電子方位(有時也指地理位置)。

跨域:兩個不同域名之間的通信,稱為跨域。
例如:http://www.baidu.com 和 http://www.sina.com.cn

jQuery如何實現跨域請求呢?答:使用JSONP形式實現跨域。

域:服務器的域名。服務器的域名的唯一標識需要滿足:協議+域名+端口,必須保證是一致的,說明域相同。
跨域:在一個服務器上,去訪問另一個服務器。

1、在js當前域中如果去調用另一個域的程序時,它不能夠執行當前域的js函數,所以就不能得到你想要的數據了。怎么辦呢?答案在下面。

2、在jQuery中使用JSONP形式實現跨域。
什么是JSONP呢?
    答:JSONP是數據交換格式JSON的一種“使用模式”,可以讓網頁從別的網域要資料。
        由於同源策略,一般來說位於 server.example.com 的服務器的網頁無法與不是 server.example.com 的服務器溝通,
        而 HTML 的 <script> 元素是一個例外,利用 <script> 元素的這個開放策略,網頁可以得到從其他來源動態產生的 JSON 資料,
        而這種使用模式就是所謂的 JSONP。

js的跨域問題圖解,如下圖所示:

傳統的js的跨域處理:
tomcat1的代碼如下:
5.ajax_domain.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>5.ajax_domain.html</title>
    <!-- js的跨域問題-解決方案  -->
    <!-- 注意:需要將函數放在 調用之前,從而保證函數存在 -->
    <script type="text/javascript">
        function showDate(data{
            alert(data.success);
        }
    
</script>
    <script type="text/javascript" src="http://localhost:80/web/getData?callback=showData"></script>
</head>
<body>
    <input type="button" value="發送ajax"/>
</body>
</html>

tomcat2的代碼如下:
GetDataServlet.java

package com.itheima.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GetDataServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 編碼問題
        response.setContentType("application/json;charset=UTF-8"); // 這樣寫標准,參考\apache-tomcat\apache-tomcat-9.0.7\conf\web.xml 中MIME的寫法

        // 1、獲得請求參數,即函數名稱
        String callback = request.getParameter("callback");
        // 2、生成json數據
        String jsonStr = "{\"success\":\"成功了\", \"info\":\"提示信息\"}";
        // 3、通知tomcat1去執行showData
        response.getWriter().print(callback + "(" + jsonStr + ")");
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

jQuery的跨域問題圖解,如下圖所示:

非傳統的jQuery的跨域處理:
tomcat1的代碼如下:
6.ajax_domain.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>6.ajax_domain.html</title>
    <!-- jQuery的跨域問題-解決方案  -->
    <script type="text/javascript" src="../js/jquery-1.8.3.js"></script>
    <script type="text/javascript">
        $.getJSON("http://localhost:80/web/getData?callback=?"function(data{
            alert(data.success);
        });
    
</script>
</head>
<body>
    <input type="button" value="發送ajax"/>
</body>
</html>

其余代碼同上。


免責聲明!

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



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