国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > AJAX > 正文

詳解ajax跨域問題解決方案

2024-09-01 08:27:09
字體:
來源:轉載
供稿:網友

今天來記錄一下關于ajax跨域的一些問題。以備不時之需。

跨域

同源策略限制

同源策略阻止從一個域上加載的腳本獲取或操作另一個域上的文檔屬性。也就是說,受到請求的 URL 的域必須與當前 Web 頁面的域相同。這意味著瀏覽器隔離來自不同源的內容,以防止它們之間的操作。

解決方式

通常來說,比較通用的有如下兩種方式,一種是從服務器端下手,另一種則是從客戶端的角度出發。二者各有利弊,具體要使用哪種方式還需要具體的分析。

    服務器設置響應頭 服務器代理 客戶端采用腳本回調機制。

方式一

Access-Control-Allow-Origin 關鍵字只有在服務器端進行設置才
會生效。也就是說即使再客戶端使用

xmlhttprequest.setHeaderREquest('xx','xx');

也不會有什么效果。

正常ajax請求

下面來模擬一下ajax非跨域請求的案例實現。

test1.html

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>ajax 測試</title></head><body><input type="button" value="Test" onclick="crossDomainRequest()"><div id="content"></div><script> var xhr = new XMLHttpRequest(); var url = 'http://localhost/learn/ajax/test1.php'; function crossDomainRequest() {  document.getElementById('content').innerHTML = "<font color='red'>loading...</font>";  // 延遲執行  setTimeout(function () {   if (xhr) {    xhr.open('GEt', url, true);    xhr.onreadystatechange = handle_response;    xhr.send(null);   } else {    document.getElementById('content').innerText = "不能創建XMLHttpRequest對象";   }  }, 3000); } function handle_response() {  var container = document.getElementById('content');  if (xhr.readyState == 4) {   if (xhr.status == 200 || xhr.status == 304) {    container.innerHTML = xhr.responseText;   } else {    container.innerText = '不能跨域請求';   }  } }</script></body></html>

同級目錄下的test1.PHP內容如下:

<?phpecho "It Works.";?>

正常ajax請求

跨域請求

剛才是HTML文件和php文件都在Apache的容器下,所以沒有出現跨域的情形,現在把HTML文件放到桌面上,這樣再次請求PHP數據的話,就營造了這樣一個“跨域請求”了。

注意看瀏覽器的地址欄信息

再次進行訪問,發現會出現下面的錯誤信息。

跨域出現了問題

針對這種情況,比較常見的一個操作就是設置Access-Control-Allow-Origin。

格式: Access-Control-Allow-Origin: domain.com/xx/yy.*

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 体育| 甘孜县| 克山县| 桐梓县| 广元市| 松原市| 陵川县| 绍兴县| 杂多县| 乌拉特中旗| 合川市| 健康| 来安县| 湖南省| 德州市| 巧家县| 新化县| 济源市| 淄博市| 岚皋县| 新干县| 柞水县| 厦门市| 宾川县| 盖州市| 自贡市| 灌阳县| 大埔区| 深州市| 西林县| 乳山市| 阳山县| 巩留县| 吉木乃县| 建瓯市| 吉安县| 佛山市| 建昌县| 府谷县| 柯坪县| 丹东市|