如何使用 fetch 在 javascript 中获取 php 错误消息
Posted
技术标签:
【中文标题】如何使用 fetch 在 javascript 中获取 php 错误消息【英文标题】:how to get the php error message in javascript with fetch 【发布时间】:2021-12-23 03:26:45 【问题描述】:我尝试在 js 的 fetch 承诺中获取我自定义的 php 错误消息。但看起来基本的捕获只给了我来自 http 响应代码的状态文本。
我的 php 是用 symfony 编写的
#[Route('/test', name:'test', methods: ['POST'])]
public function test(Request $req): Response
return new JsonResponse(['error' => 'my Cusom Error'], 400);
let btn = document.getElementById('myButton');
btn.addEventListener('click', function(event)
const fd = new FormData(); // need it because want to send some files with it later
fd.append('user', 'myUserName');
fetch('/test', method: 'POST', body: fd)
.then((response) =>
if(!response.ok)
throw Error(response.statusText);
// how to catch the message returned form the server here?
// the response object does not have this information
// using response.error() returns a error that error is not function
// response.error is undefined and has no information
// a workaround is using the resposen.json().then((errorData) => ...) inside here, but looks not fine for me.
return response.json();
)
.then((data) =>
console.log('data received', data);
)
.catch((error) =>
console.log(error);
);
);
【问题讨论】:
您实际上是在问如何从 PHP 更改 HTTP 响应代码吗?因为您现在所做的只是返回一些 JSON。就浏览器而言,请求似乎总是成功的。 @ADyson 那不正确。 response.ok 是假的,因为 php 返回 400 而不是 200 对不起,我错过了你正在使用 symfony jsonresponse 你不能只在网络标签中查找错误消息的位置吗? 问题解决了。我不知道我之前可以用 await 扔掉它 【参考方案1】:你可以像往常一样得到身体。
throw await response.json();
会正常工作。
【讨论】:
这正是我想要的:【参考方案2】:我的解决方案是这样的
let btn = document.querySelector('#myButton');
btn.addEventListener('click', (event) =>
const fd = new FormData();
fd.append('user', 'myUserName');
fetch('/test', method: 'POST', body: fd
.then(async (response) =>
if(!response.ok)
throw await response.json();
return response.json();
)
.then((data) =>
console.log('success', data);
)
.catch((error) =>
console.error(error);
)
);
它现在可以工作了。非常感谢 GoldenretriverYT
【讨论】:
以上是关于如何使用 fetch 在 javascript 中获取 php 错误消息的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 中的 Promises/Fetch:如何从文本文件中提取文本
如何使用“Fetch API”在 javascript 和 c# 之间传递数据?
如何从 fetch javascript 请求的响应中获取数据
如何使用 javascript fetch api 和 express multer 上传图像