之前有介紹用iframe做跨網域方式,那如果想直接對其他網域發送呢?我們可透過callback的機制,來實現跨網域,簡單來說就是,就是依照參數,include一隻script。
例如:
function test( result ){ alert(result); } $.getScript("http://localhost/jsonp.php?callback=test");
jsonp.php
echo $_GET["callback"]."(\"Hello!\")";
那如果想直接發送ajax,可透過實作server proxy的方式或直接在server端加入一行header,來加入可以發送網域。(可參考此link)
Access-Control-Allow-Origin:http://localhost/
ajax cross domain範例:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script> <script> $.get("http://localhost:8080",function(){ console.log(arguments); }); </script>
server side(node.js):
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/plain', "Access-Control-Allow-Origin": "http://localhost/" }); res.end('Hello World\n'); }).listen(8080, "127.0.0.1");
flash也是透過類似的方式,當發送不同網域的request時,會先在所在網域,去讀取crossdomain.xml。(http://localhost/crossdomain.xml)
<!--?xml version="1.0"?--> <cross-domain-policy> <allow-access-from domain="*"> </allow-access-from></cross-domain-policy>