1.ajax技術的核心:xmlHttpRequest對象
同步請求
異步請求
狀態碼:304意味着響應有效,且請求的資源並沒有被修改,200作爲成功的標誌
xhr.open("get","example.php?name1=value1&name2=value2",true);
function addURLParam(url,name,value){
url+=(url.indexOf("?")==-1? "?":"&");
url +=encodeURIComponent(name)+"="+encodeURIComponent(value);
return url;
}
2.ajax 跨域請求的問題
什麼是ajax跨域請求?
瀏覽器對AJAX跨域限制很嚴格,我有一個主機,IP爲A,A上80端口,81端口都有服務,然後IP爲A的主機上綁定了兩個域名,www.test.com 和www.test1.com,通過這兩個IP都能方位到80的服務,但是如果在www.test.com上用AJAX請求www.test1.com的URL,就不行。就屬於跨域。同樣,www.test.com上訪問www.test.com:81的請求也是跨域。雖然是同一個主機,同一個IP,但是隻要域名不一致,甚至端口不一致,都屬於跨域。那麼,如果一個主機上不同端口上部署有不同的服務,怎麼用AJAX去調用呢?
首先,比較一下json與jsonp格式的區別:
json格式:
{
"message":"獲取成功",
"state":"1",
"result":{"name":"工作組1","id":1,"description":"11"}
}
jsonp格式:
callback({
"message":"獲取成功",
"state":"1",
"result":{"name":"工作組1","id":1,"description":"11"}
})
javascript 不同的框架,都有實現跨域請求的機制:
(1)jsonp
jquery ajax 跨域請求
$(document).ready(function(){ var url='http://localhost:8080/WorkGroupManagment/open/getGroupById" +"?id=1&callback=?'; $.ajax({ url:url, dataType:'jsonp', processData: false, type:'get', success:function(data){ alert(data.name); }, error:function(XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.status); alert(XMLHttpRequest.readyState); alert(textStatus); }}); });angularJS 的跨域請求解決方案
(2)CORS