瀏覽器與服務端通信

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 的跨域請求解決方案    
     $http.jsonp :  callback=JSON_CALLBACK,就是這麼固定寫死的。       

  (2)CORS     

發佈了40 篇原創文章 · 獲贊 7 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章