請問一下先進:
我是新手,使用 MAMP+visual studio code 在 windows10 練習 Javascript + PHP AJAX訊息交換.
其中 php檔及html檔都放在同一個目錄下(C:/MAMP/htdocs), 若直接使用 chrome 進入 localhost:80\xxx.html,就可以正確交換資料(有收到php回傳資料),若在vs code 透過 open in default browser 進入chrome (file:///C:/MAMP/htdocs/page%203.html),則無法正確交換資料,會有跨域的問題.
Q1: 請問有辦法在VS code或是chrome 做任何設定,解決跨域的問題?或是html/JS程式中的file path 該如何寫,可以避免此問題?還是只能透過類似localhost方式開檔來避免?
Q2: vs code 有安裝PHP Debug extension,但我還不太清楚到底該在chrome,還是在vs code,還是在兩者同時進行 single step/run/stop debug?有推薦的design/debug flow嗎?
以下是透過chrome開發人員選項console看到的跨域錯誤訊息:
Access to XMLHttpRequest at 'file:///C:/MAMP/htdocs/test3.php' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https.
php程式如下:
<?php
echo "test 3 experiment: 2020/12/4";
?>
html 程式如下:
<!DOCTYPE html>
<html>
<body>
<h1>Ajax Test</h1>
<h2>@page 3</h2>
<div>
<label id="id1" name="id1">1<br /></label>
</div>
<p>
<a href="index.html">index<br /></a>
<a href="page 1.html">page 1<br /></a>
<a href="page 2.html">page 2<br /></a>
</p>
<script >
var xhttp = new XMLHttpRequest();
var url = "test3.php";
xhttp.open("GET", url, true);
xhttp.onreadystatechange = phpBack;
xhttp.send();
function phpBack(){
if((xhttp.readyState == 4)&&(xhttp.status == 200)){
document.getElementById("id1").innerText = xhttp.responseText;
}
}
</script>
</body>
</html>