如何使用 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);

javascript

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 上传图像

如何在 JavaScript 中将 Ajax 转换为 Fetch API?

javascript 如何使用fetch处理api超时