AJAX跨域
AJAX不容許跨域訪問。
跨域是指瀏覽器B顯示的是服務器S1的數據,全是從S1取得的數據則是同域;但若是B顯示的S1上的數據的某個好比img是從S2上取得的數據,則是跨域。端口不同也是跨域。跨域不只是跨服務器,仍是跨IP,跨端口。
AJAX經過三種方法,能夠解決跨域問題。
一、設置請求頭,每個路徑裏都要設置,能夠封裝成方法方便調用。
res.setHeader("Access-Control-Allow-Origin","*");
res.setHeader("Access-Control-Allow-Methods","GET,POST");
3000服務器請求跨域到3001,須要在3001裏改寫代碼
二、設置代理
三、JSONP 即JSON with padding,script的src能夠提交服務器。本質上jsonp不是AJAX,是採用script繞過了AJAX的跨域問題。
3001的路由表中,寫:
router.get('/jsonp',function(req,res){
res.send("callback('ajax的跨域訪問')");
}); //這種方法只能get提交
在3000的html中輸入:
$("img").click(function(){
$("body").append("<script src='http=//localhost:3001/users/jsonp'><\/script>"); //<\/script>裏的\是轉義符
});
用ajax實現jsonp
$.ajax({
type:"get,
url:"http://localhost:3001/users/jsonp",
data:{username:"abcabc"},
dataType:"jsonp",
success:function(data){
console.log(data);
}
});
3001的路由表中,寫:
router.get('/jsonp',function(req,res){
res.jsonp("ajax的跨域訪問");
});html