我正在制作一个聊天应用程序,在后端使用 PHP,在前端使用 React.js。但是,我在使用 fetch API 时遇到了问题。
我的调用端点的提取
fetch('http://localhost/registration-processing',{
method:'POST',
headers:{
'Content-Type':'application/json'
},
body:JSON.stringify({
firstName:firstName,
lastName:lastName,
username:username,
email:email,
password:password
})
})
.then((response)=>{
if(response.ok){
return response.json();
}
})
.then((data)=>{
console.log('Response:'+data);
})
.catch((err)=>{
console.error('Error is this:'+err);
})
我没有在“localhost”中明确写入端口,因为 Apache 在端口 80 上运行。在安装 React 之前,Fetch 工作得非常好,我在其中使用了纯 JS。现在我收到消息:
Access to fetch at 'http://localhost/registration-processing' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
但是我尝试在 fetch 中使用
mode:'no-cors'
,并且得到成功的响应(.then 被执行,而不是 catch),但结果是 Response:undefined
,即使在我尝试使用 echo json_encode(object)
返回值之后,因为 我认为app.php 无法访问,它是为了处理所有路由和获取请求而设计的。
我尝试像这样配置.htaccess,但没有结果
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /back-end/app.php [QSA,L]
这是我的项目结构:
├── back-end/
│ ├── app.php
│ └── .htaccess
├── front-end/
│ ├── react-environment(where fetch is)
所以,我不知道可能出现什么问题以及如何解决这个问题。另请注意:当我使用
php -S localhost:8000
时没有问题,但当我通过 Laragon 使用 Apache 服务器时,不断显示错误。
请注意,
fetch
位于前端项目中,并在客户端(浏览器)上执行。因此,localhost
解析为用户的计算机,而不是您的服务器。
您只需将
localhost
替换为您部署的服务器 IP/域名即可。