實現跨域請求詳解如下:
域名: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>
其余代碼同上。