javascript - php js 跨域請求

來源:互聯網
上載者:User

ajax 請求本網域名稱下的一個方法 userInfo,擷取使用者資訊,但是在擷取使用者資訊的userInfo方法,是使用了單點登入系統的,所以擷取資訊的過程存在跨域,這樣ajax 請求就會報錯,請問如何解決?

回複內容:

ajax 請求本網域名稱下的一個方法 userInfo,擷取使用者資訊,但是在擷取使用者資訊的userInfo方法,是使用了單點登入系統的,所以擷取資訊的過程存在跨域,這樣ajax 請求就會報錯,請問如何解決?

我想到方法
1- 使用本地的php通過curl擷取,這樣ajax只要請求本地的php就不會發生跨域了,而PHP端的curl是沒有跨域限制的。
2- 宿主端提供js指令碼,伴生系統引用該js,並調用其中聲明的方法進行ajax請求就不屬於跨域了。
通常我都是用方法1,方法2需要宿主端系統的開發人員配合,太麻煩。

在php層做一個代理,讓php請求那個跨域介面,然後php再把資料返回到頁面上。
這個介面不能用jsonp,不是不能實現,是不安全。不能泄漏使用者資訊,因為是userinfo,所以必須注重安全問題。

跨域時,地址參數中要加一個回呼函數,在js裡,在這個回呼函數裡處理返回的資料。這裡有一個post的跨域,可以參考一下。https://github.com/limeng0403/libs/blob/master/EOF/getJSON%E5%9C%A8PHP%E7%8E%AF%E5%A2%83%E4%B8%8B%E5%AE%9E%E7%8E%B0%E8%B7%A8%E5%9F%9F%E6%95%B0%E6%8D%AE%E5%8A%A0%E8%BD%BD.md

使用ajax jsonp

  1. GET請求可以用jsonp

  2. 支援CORS的瀏覽器,可用CORS

請求資料步驟

發送請求--->伺服器響應返回--->瀏覽器接受響應--->判斷是否是同域下

是的話,就把響應資料返回給ajax。不是的話就提醒禁止跨域請求。

其實服務端可以在回應標頭中增加

header("Access-Control-Allow-Origin: 允許的網域");
header("Access-Control-Allow-Methods: 允許請求的方法");
header("Access-Control-Allow-Headers: X-PINGOTHER");

告訴瀏覽器可以把響應值返回給此請求

參考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

跨域可以參考下面這篇文章
http://www.cnblogs.com/duanhuajian/p/4211616.html

header('content-type:application:json;charset=utf8');
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:POST');
header('Access-Control-Allow-Headers:x-requested-with,content-type');

在你的php檔案中添加上這個

可以使用JSONP請求

我剛剛整理的解決跨域請求的三種方法:https://segmentfault.com/a/1190000004539815

postMessage();onmessage。

最好的是使用php curl代理過去,控制度高一點。
第二就是修改伺服器介面檔案,開啟跨域限制,這樣ajax就可以調用了。
第三就是建議樓主用jsonp了。

具體單點登入系統內部怎麼實現的沒有去看,奇怪的一點是,如果我通過瀏覽器直接存取userInfo方法 是可以擷取使用者的資訊,然後ajax 再請求userInfo 方法 就能正常返回使用者資訊了,很是奇怪,所以我用了一個很笨的方法,就是在頁面底部用了一個iframe,iframe載入應該是一次http請求,就正常了!但直接存取為什麼報跨域的錯誤的原因還是沒有找到,感謝大家的回答! @incNick @大猛 @張亞濤 @ 等等……

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.