使用jsonp解決Ajax跨域訪問問題

2022-03-01 19:07:09 字數 1410 閱讀 7406

在最近做的乙個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如下:

1

public 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...