{"id":232,"date":"2017-09-19T14:52:17","date_gmt":"2017-09-19T06:52:17","guid":{"rendered":"http:\/\/www.lixiaodong.com\/?p=232"},"modified":"2025-03-06T11:04:57","modified_gmt":"2025-03-06T03:04:57","slug":"ajax%e8%b7%a8%e5%9f%9f%e9%97%ae%e9%a2%98%e7%9a%84%e5%87%a0%e7%a7%8d%e6%96%b9%e6%b3%95","status":"publish","type":"post","link":"https:\/\/www.lixiaodong.com\/?p=232","title":{"rendered":"ajax\u8de8\u57df\u95ee\u9898\u7684\u51e0\u79cd\u65b9\u6cd5"},"content":{"rendered":"<p>\u5728\u4f7f\u7528ajax\u7684\u65f6\u5019\uff0c\u6d4f\u89c8\u5668\u4f1a\u5bf9\u8c03\u7528\u7684\u5730\u5740\u505a\u9650\u5236\u3002\u53ea\u6709\u5728\u76f8\u540c\u534f\u8bae\u3001\u76f8\u540c\u57df\u540d\u3001\u76f8\u540c\u7aef\u53e3\u7684\u60c5\u51b5\u4e0b\u624d\u80fd\u8c03\u7528\u6210\u529f\u3002<br \/>\n\u4f8b\u5982\uff0c\u4e00\u4e2a\u7f51\u9875\u662fhttp:\/\/www.abc.com\/abc.html\uff0c\u5728\u8fd9\u4e2a\u9875\u9762\u4e0a\uff0c\u4e0b\u9762\u7684ajax\u8c03\u7528\u5c06\u4e0d\u4f1a\u6210\u529f\uff1a<br \/>\n\uff081\uff09https:\/\/www.abc.com\/*\uff08*\u8868\u793a\u4efb\u610f\u7684\u5b57\u6bcd\u6216\u659c\u7ebf\uff09\uff08\u7531\u4e8e\u4f7f\u7528\u4e86\u4e0d\u540c\u7684\u534f\u8bae\uff09<br \/>\n\uff082\uff09http:\/\/www.abcd.com\/* \u6216 http:\/\/www1.abc.com\/*\uff08\u7531\u4e8e\u4e0d\u662f\u76f8\u540c\u7684\u57df\u540d\u3002\u4e00\u7ea7\u57df\u540d\u76f8\u540c\uff0c\u4e8c\u7ea7\u6216\u4ee5\u4e0b\u57df\u540d\u4e0d\u76f8\u540c\uff0c\u4e5f\u4f1a\u88ab\u8ba4\u4e3a\u662f\u4e0d\u540c\u7684\u57df\u540d\uff09<br \/>\n\uff083\uff09http:\/\/www.abc.com:8080\/* \uff08\u7531\u4e8e\u7aef\u53e3\u4e0d\u540c\uff09<\/p>\n<p>\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u51e0\u79cd\u65b9\u6cd5\u6765\u89e3\u51b3ajax\u8de8\u57df\u95ee\u9898\u3002<br \/>\n\u6211\u4eec\u4f7f\u7528a.test.com\u548cb.test.com 2\u4e2a\u57df\u540d\u3002b.test.com\u4e0b\u7684html\u9875\u9762\u4f7f\u7528ajax\u65b9\u5f0f\u8c03\u7528a.test.com\u4e0b\u7684\u63a5\u53e3\u3002<br \/>\n\u6253\u5f00eclipse\uff0c\u65b0\u5efa1\u4e2adynamic web project\uff0c\u5de5\u7a0b\u540d\u4e3acrossSite\uff0c\u5f53\u4f5ca.test.com\u3002\u65b0\u5efa1\u4e2atomcat server\u3002<br \/>\n\u518d\u5efa\u4e00\u4e2astatic web project\uff0c\u5de5\u7a0b\u540d\u4e3acrossSite2\uff0c\u5f53\u4f5cb.test.com\u3002<br \/>\n\u4f7f\u7528nginx\u7ed92\u4e2a\u57df\u540d\u505a\u53cd\u5411\u4ee3\u7406\u3002\u5728nginx\u91cc\u505a\u5982\u4e0b\u914d\u7f6e\uff1a<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\tserver {\r\n\t\tlisten \t\t\t80;\r\n\t\tserver_name \ta.test.com;\r\n\t\tlocation\t\/ {\r\n\t\t\t\t\t\tproxy_pass \t\thttp:\/\/localhost:8080\/crossSite\/;\r\n\t\t\t\t\t}\r\n\t}\r\n\r\n\tserver {\r\n\t\tlisten \t\t\t80;\r\n\t\tserver_name \tb.test.com;\r\n\t\tlocation\t\t\/ {\r\n\t\t\t\troot\tcrossSite2\u7684\u5b58\u50a8\u76ee\u5f55\\\\WebContent\\\\;\r\n\t\t\t\tindex\tindex.html;\r\n\t\t}\r\n\t}\r\n<\/pre>\n<p>\u4fee\u6539\u672c\u673a\u7684host\u6587\u4ef6\uff0c2\u4e2a\u57df\u540d\u90fd\u6307\u5411127.0.0.1\u3002<br \/>\n\uff081\uff09jsonp<br \/>\njsonp\u7684\u539f\u7406\u57fa\u4e8e\u4ee5\u4e0b\uff1ahtml\u9875\u9762\u91cc\u7684script\u6807\u7b7e\u53ef\u4ee5\u5f15\u7528\u7684\u5730\u5740\u4e0d\u53d7\u9650\u5236\u3002\u6bd4\u5982\uff1ahttp:\/\/b.test.com\/index.html\u8fd9\u4e2a\u9875\u9762\u91cc\u53ef\u4ee5\u5305\u542bscript\u6807\u7b7e\uff0c\u5b83\u7684src\u4e3a&#8221;http:\/\/a.test.com\/CrossSiteServlet&#8221;\u3002<br \/>\n\u5728crossSite\u5de5\u7a0b\u91cc\u521b\u5efa\u4e00\u4e2aservlet\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\r\nimport java.io.IOException;\r\nimport java.util.HashMap;\r\nimport java.util.Map;\r\n\r\nimport javax.servlet.ServletException;\r\nimport javax.servlet.annotation.WebServlet;\r\nimport javax.servlet.http.HttpServlet;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\n\r\nimport org.json.JSONObject;\r\n\r\n\/**\r\n * Servlet implementation class CrossSiteServlet\r\n *\/\r\n@WebServlet(&quot;\/CrossSiteServlet&quot;)\r\npublic class CrossSiteServlet extends HttpServlet {\r\n\tprivate static final long serialVersionUID = 1L;\r\n\r\n    public CrossSiteServlet() {\r\n        super();\r\n    }\r\n\r\n\tprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\r\n\t\tresponse.setCharacterEncoding(&quot;utf-8&quot;);\r\n\t\tString callback = request.getParameter(&quot;callback&quot;);\r\n\t\tMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();\r\n\t\tmap.put(&quot;id&quot;, &quot;id1&quot;);\r\n\t\tmap.put(&quot;name&quot;, &quot;name1&quot;);\r\n\t\tJSONObject jsonObj = new JSONObject(map);\r\n\t\tString returnStr = callback + &quot;(&quot; + jsonObj.toString() + &quot;)&quot;;\r\n\t\tresponse.getWriter().println(returnStr);\r\n\t}\r\n\r\n\tprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\r\n\t\tdoGet(request, response);\r\n\t}\r\n\r\n}\r\n<\/pre>\n<p>\u5f53\u6211\u4eec\u8bbf\u95eehttp:\/\/a.test.com\/CrossSiteServlet?callback=callback\uff0c\u5c06\u8fd4\u56de\u5982\u4e0b\u7684\u6570\u636e\uff1acallback({&#8220;id&#8221;:&#8221;id1&#8243;,&#8221;name&#8221;:&#8221;name1&#8243;})\uff0c\u5373\u4e00\u4e2ajs\u51fd\u6570\u540d\u4ee5\u53cajson\u683c\u5f0f\u7684\u6570\u636e\u3002<\/p>\n<p>\u5728crossSite2\u5de5\u7a0bwebContent\u76ee\u5f55\u4e0b\u65b0\u5efa\u4e00\u4e2ahtml\u9875\u9762\uff1aindex.html\u3002\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta charset=&quot;UTF-8&quot;&gt;\r\n&lt;title&gt;Insert title here&lt;\/title&gt;\r\n&lt;script src=&quot;http:\/\/code.jquery.com\/jquery-1.8.0.min.js&quot;&gt;&lt;\/script&gt;\r\n&lt;script type=&quot;text\/javascript&quot;&gt;\r\n    $().ready(function () {\r\n        $.ajax({\r\n            type: &quot;get&quot;,\r\n            async: true,\r\n            url: &quot;http:\/\/a.test.com\/CrossSiteServlet&quot;,\r\n            data:{},\r\n            dataType: &quot;jsonp&quot;,\r\n            jsonp: &quot;callback&quot;, \/\/\u4f20\u9012\u7ed9\u8bf7\u6c42\u5904\u7406\u7a0b\u5e8f\u6216\u9875\u9762\u7684\uff0c\u7528\u4ee5\u83b7\u5f97jsonp\u56de\u8c03\u51fd\u6570\u540d\u7684\u53c2\u6570\u540d(\u4e00\u822c\u9ed8\u8ba4\u4e3a:callback)\r\n            success: function (json) {\r\n                alert(json.id+&quot; &quot;+json.name);\r\n            },\r\n            error: function () {\r\n                alert('fail');\r\n            }\r\n        });\r\n    });\r\n&lt;\/script&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\njsonp test\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>\u6ce8\u610f\u4e0a\u9762\u7684jsonp\u540e\u9762\u7684\u503c\u4e3acallback\uff0c\u8fd9\u4e2a\u503c\u5fc5\u987b\u540c\u4e0a\u9762servlet\u8fd4\u56de\u7684js\u51fd\u6570\u540d\u4e00\u81f4\u3002<\/p>\n<p>\uff082\uff09iframe<br \/>\n\u539f\u7406\uff1a\u5728\u9875\u9762\u91cc\u5d4c\u5957\u4e00\u4e2aiframe\uff0c\u8fd9\u4e2aiframe\u7684src\u5c5e\u6027\u6307\u5411\u4e0d\u540c\u7684\u57df\u540d\uff0c\u4ece\u800c\u53ef\u4ee5\u4ece\u8fd9\u4e2aiframe\u91cc\u83b7\u53d6\u5230\u5176\u5b83\u57df\u540d\u4e0b\u7684\u6570\u636e\u3002<br \/>\niframe\u4e5f\u6709\u8de8\u57df\u9650\u5236\uff0c\u6b63\u5e38\u60c5\u51b5\u4e0b\uff0cb.test.com\u57df\u540d\u4e0b\u7684\u7f51\u9875\u662f\u4e0d\u80fd\u8bbf\u95ee\u5b83\u5185\u90e8\u6307\u5411a.test.com\u57df\u540d\u7684iframe\u91cc\u7684\u5185\u5bb9\u7684\u3002<br \/>\n\u53ef\u4ee5\u901a\u8fc7\u4fee\u6539\u9875\u9762\u548ciframe\u7684document.domain\u5c5e\u6027\uff0c\u8ba9\u5b83\u4eec\u90fd\u4e3a\u4e00\u7ea7\u57df\u540dtest.com\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u8de8\u57df\u8bbf\u95ee\u4e86\u3002<br \/>\n\u9996\u5148\u5728crossSite2\u5de5\u7a0bWebContent\u76ee\u5f55\u4e0b\u65b0\u5efaindex2.html\uff0c\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta charset=&quot;UTF-8&quot;&gt;\r\n&lt;title&gt;Insert title here&lt;\/title&gt;\r\n&lt;script src=&quot;http:\/\/code.jquery.com\/jquery-1.8.0.min.js&quot;&gt;&lt;\/script&gt;\r\n&lt;script type=&quot;text\/javascript&quot;&gt;\r\n\tdocument.domain='test.com';\r\n\tfunction getData(){\r\n\t\tdocument.getElementById('ifrm1').src=&quot;http:\/\/a.test.com\/IframeCrossSiteServlet&quot;;\r\n\t\t\/\/setTimeout(function(){alert($(&quot;#ifrm1&quot;).contents().find(&quot;div1&quot;).text())}, 3000);\r\n\t\tsetTimeout(function(){alert($(document.getElementById('ifrm1').contentWindow.document.body).find('#div1').text())}, 3000);\r\n\t}\r\n&lt;\/script&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;iframe id=&quot;ifrm1&quot; name=&quot;ifrm1&quot; style=&quot;display: none;&quot;&gt;&lt;\/iframe&gt;\r\n\r\n&lt;button type=&quot;button&quot; onclick=&quot;getData()&quot;&gt;get data&lt;\/button&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>\u6ce8\u610f\u4e0a\u9762\u5c06document.domain\u4fee\u6539\u4e3a\u2018test.com\u2019\uff0c\u5982\u679c\u53bb\u6389\u8fd9\u53e5\u5c31\u4f1a\u62a5\u9519\u3002<\/p>\n<p>\u7136\u540e\u5728crossSite\u5de5\u7a0b\u91cc\u65b0\u5efa\u4e00\u4e2aservlet\uff1aIframeCrossSiteServlet\u3002\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nimport java.io.IOException;\r\nimport javax.servlet.ServletException;\r\nimport javax.servlet.annotation.WebServlet;\r\nimport javax.servlet.http.HttpServlet;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\n\r\n\/**\r\n * Servlet implementation class IframeCrossSiteServlet\r\n *\/\r\n@WebServlet(&quot;\/IframeCrossSiteServlet&quot;)\r\npublic class IframeCrossSiteServlet extends HttpServlet {\r\n\tprivate static final long serialVersionUID = 1L;\r\n\r\n    public IframeCrossSiteServlet() {\r\n        super();\r\n    }\r\n\r\n\tprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\r\n\t\tresponse.getWriter().append(&quot;&lt;script type=\\&quot;text\/javascript\\&quot;&gt;\\r\\n&quot; +\r\n\t\t\t\t&quot;document.domain='test.com';\\r\\n&lt;\/script&gt;\r\n\r\n&lt;DIV id=\\&quot;div1\\&quot;&gt;I am an iframe.&lt;\/DIV&gt;\r\n\r\n&quot;);\r\n\t}\r\n\r\n\tprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\r\n\t\tdoGet(request, response);\r\n\t}\r\n\r\n}\r\n<\/pre>\n<p>\u6ce8\u610f\u4e0a\u9762\u5728doGet\u65b9\u6cd5\u91cc\uff0c\u540c\u6837\u5730\u5c06document.domain\u7684\u503c\u6539\u4e3a\u2018test.com\u2019\u3002<\/p>\n<p>\u4ee5\u4e0a2\u79cd\u65b9\u6cd5\u5b58\u5728\u7684\u95ee\u9898\uff1a<br \/>\n1. jsonp\u53ea\u80fd\u4f7f\u7528get\u8c03\u7528\u3002\u5373\u4f7f\u5728\u4ee3\u7801\u91cc\u6539\u6210post\u8c03\u7528\uff0c\u5b9e\u9645\u4e0a\u8fd8\u662f\u4f7f\u7528get\u8c03\u7528\u3002\u6240\u4ee5\u4e0d\u591f\u5b89\u5168\u3002<br \/>\n2. iframe\u53ea\u80fd\u5728\u4e00\u7ea7\u57df\u540d\u76f8\u540c\u7684\u60c5\u51b5\u4e0b\u4f7f\u7528\u3002\u5982\u679c\u4e00\u7ea7\u57df\u540d\u4e0d\u540c\uff0c\u5c31\u4e0d\u80fd\u4f7f\u7528\u4e86\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u4f7f\u7528ajax\u7684\u65f6\u5019\uff0c\u6d4f\u89c8\u5668\u4f1a\u5bf9\u8c03\u7528\u7684\u5730\u5740\u505a\u9650\u5236\u3002\u53ea\u6709\u5728\u76f8\u540c\u534f\u8bae\u3001\u76f8\u540c\u57df\u540d\u3001\u76f8\u540c &hellip; <a href=\"https:\/\/www.lixiaodong.com\/?p=232\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[40],"class_list":["post-232","post","type-post","status-publish","format-standard","hentry","category-jquery","tag-ajax"],"_links":{"self":[{"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=\/wp\/v2\/posts\/232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=232"}],"version-history":[{"count":10,"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=\/wp\/v2\/posts\/232\/revisions"}],"predecessor-version":[{"id":242,"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=\/wp\/v2\/posts\/232\/revisions\/242"}],"wp:attachment":[{"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lixiaodong.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}