AJAX跨域解決方案

關於一級域名和二級域名跨域的解決方案

1,對於域名a.a.com和域名http://www.a.com/的兩個頁面javascript

  若是要在a.a.com使用AJAX訪問http://www.a.com/的時候js 會提示"沒有權限"php

這樣的錯誤很明顯,跨域了,在js當中跨域,怎麼解決呢?html

  發如今頁面用Script來引用http://www.google.com/js/js.js 時卻不會報錯,因此就想了個轉化的辦法java

 也是在網上查到的,人家稱之爲AJAJ技術,其實也是AJAX的一部分吧jquery

 既然我要用script標籤來引用外部js,那麼確定得有個<script>申明吧ajax

 <head>json

<script src='' language='"javascript" id="get"></script>跨域

</head>cookie

好了,如今就能夠在js中動態連接外部js了、app

button.click=function(){

var doc=document.getElementById("get");

doc.src='http://www.google.com/js/js.js';

//若是'http://www.google.com/js/js.js'的內容是

----------------------------------------

var p='你色嗎';

----------------------------------------

那麼我就能夠這樣寫了

//這裏注意點,不是IF

(doc.readStatus==200)

      alert(p);

整個源碼示例:

 

複製代碼
 1  < HTML >  
 2  < HEAD >  
 3  < TITLE >  New Document  </ TITLE >  
 4  < META  NAME ="Generator"  CONTENT ="EditPlus" >  
 5  < META  NAME ="Author"  CONTENT ="" >  
 6  < META  NAME ="Keywords"  CONTENT ="" >  
 7  < META  NAME ="Description"  CONTENT ="" >  
 8  </ HEAD >  
 9  < SCRIPT  LANGUAGE ="JavaScript"  src =""  id ="get" >  
10  </ SCRIPT >  
11  < SCRIPT  LANGUAGE ="JavaScript" >  
12 
13  function  get(url) 
14 
15  var  obj  =  document.getElementById( " get " ); 
16  obj.src  =  url; 
17  (obj.readStatus  ==   200
18 
19  alert(xml); 
20 
21 
22  function  text() 
23 
24  get( ' get.php ' ); 
25 
26 
27  </ SCRIPT >  
28  < BODY >  
29  < INPUT  TYPE ="button"  value ="CLICK ME"  onclick ="text()" >  
30  </ BODY >  
31  </ HTML >  
複製代碼

 

 

get.php的代碼就是

<? echo '你色嗎?' ?>

 

點擊按鈕,輸出 「你色嗎?」

就這麼簡單,看起來比那個Ajax的簡單吧

這個是Ajax執行權限的跨域,另外一個,cookie的跨域,這個很簡單了

2,cookie的跨域

var main=".main.com"; //記着必定要加個「.」

function setCookie(name,value,day)
{
    var now=new Date();var ms;
    if(day>0){
    now.setTime(now.getTime()+(day*24*3600*1000));
    }
    document.cookie=name+"="+escape(value)+";expires="+now.toGMTString()+";path=/;domain="+main;
}

附上php跨域示例

     dotnet跨域示例 

3,Forms驗證下的一級域名和二級域名的登陸同步

 簡要的說下

 <authentication mode="Forms" >
     <forms defaultUrl="default.aspx" loginUrl="login.aspx" name="_aq"   timeout="60" domain=".xs.com" ></forms>
  </authentication>

 注意的幾項 name domain 這兩個選項在父子域名中必須相同

 另外登陸代碼

                    FormsAuthenticationTicket tic = new FormsAuthenticationTicket(uname, true, gettimeByvalue(time));
                    string entic = FormsAuthentication.Encrypt(tic);
                    HttpCookie h = new HttpCookie(FormsAuthentication.FormsCookieName, entic);
                    h.Expires = d;
                    h.Domain = FormsAuthentication.CookieDomain;
                    h.HttpOnly = true;
                    HttpContext.Current.Response.Cookies.Add(h);

 注意加紅部分

註銷部分

       Context.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
        FormsAuthentication.SignOut();
        Response.Redirect("/");

 4,JSONP方式

   這裏補上浪子兄的建議,使用JSONP突破跨域瓶頸

  理論上就是我上面說的方法,只是一些js框架都封裝起來了

  就已jquery來作示例

 ajax方法:

代碼
複製代碼
 $.ajax({
             url:"show.aspx",
             dataType:"jsonp",
             jsonp:"jsoncallback",/*默認值:callback*/
             success:function(data){
                 alert(data.mes);
             }
        });
複製代碼

 

  show.aspx頁面:

 

 Response.ContentType  =   " application/x-javascript " ;    
 
string  cb  =  Request.Params[ " jsoncallback " ];
 Response.Write(cb 
+   " ({mes:\"kofaslfj\ " }) " );
 Response.End();

 

getJSON方法:

$.getJSON( " show.aspx&callback=? " ,function (d){
         alert(d.mes);
        }
        );

 

這個show.aspx與上面差很少同樣,把jsoncallback換成callback就好了

另外不知有人有不一樣域名跨域的解決方案,但願可以一塊兒討論...

相關文章
相關標籤/搜索