在最近做的乙個mvc2專案中,需要讓兩個不同網域名稱的專案進行互動。從其中乙個專案向另乙個專案發出乙個ajax請求,驗證登入資訊。但使用普通的返回乙個jsonresult的方式返回結果時,在瀏覽器中報如下錯誤:xmlhttprequest cannot load ' '. no 'access-control-allow-origin' header is present on the requested resource. origin ' ' is therefore not allowed access.
這是由於ajax是通過xmlhttprequest物件進行非同步資料互動,而瀏覽器出於安全方面的考慮,不允許js進行跨域操作。
跨域訪問分為本域和子域的相互訪問(和以及本域和其它域的相互訪問(和當前問題是本域和子域之間的相互訪問。
解決跨域訪問問題,有好幾種方法,具體可參考這篇部落格:
另外,還可以使用jsonp的方法來解決。具體方法如下:
在頁面中傳送ajax非同步請求時,使用如下格式的方法:
1$.ajax(,
5 datatype: "jsonp",
6 success: function
(data)
10else
).removeclass("wait_log");15}
16},
17 beforesend: function
() ).addclass("wait_log");21}
22 });
處理該請求的action如下:
1public actionresult popup_login(string callback, string mail, string pwd, bool
remember)',msg:'',href:'',uname:'',uid:''";
34///*進行登入處理,並得到處理結果*/56
var username = (curruser ??ul).user_name;
7var userid = (curruser ??ul).user_id;
8 jsonp = string.format(jsonp, "
true
", "
登入成功
", ""
, username, userid);
9return content(callback + "()"
);10 }
在ajax請求時,如果沒有特別指定jsonp的變數名,那麼它預設就是為「callback」,請求引數的名稱也必須為「callback」;如果有指定變數名,就以指定的名稱為準。
更多關於jsonp的使用請參考部落格:
jsonp解決ajax跨域問題
利用jsonp解決ajax跨域問題 至於success裡面的操作可以忽略 某工程下ajax請求 var isvisible true function getlog var startpage data.startpage var endpage data.endpage 拼接 導航 按鈕 和 資料...
用JSONP解決ajax跨域問題
jsonp json with padding 要點 1.script標籤 2.用script標籤載入資源是沒有跨域問題的 概要 在資源載入進來之前先定義乙個函式,這個函式接受乙個引數 資料 函式裡面利用這個引數做一些事情。然後在需要的時候通過script標籤載入對應遠端檔案資源,當遠端的檔案資源被...
ajax跨域傳輸(jsonp格式)
先拋個列子,自 test.html doctype html html head meta charset utf 8 title test title script src jquery 1.5.2.min.js script script src ajax.js script head body...