将 PHP 异常返回到 javascript FETCH API

Posted

技术标签:

【中文标题】将 PHP 异常返回到 javascript FETCH API【英文标题】:Returning an exception with PHP to javascript FETCH API 【发布时间】:2018-05-05 05:28:30 【问题描述】:

我目前正在使用 javascript 进行编码,但我碰壁了。 Javascript FETCH api to POST 是这样的:

('form') 是我在 html 中的表单#ID。

fetch(URL_TO_POST, 
            method: 'post',
            body: new FormData(document.querySelector('form'))
        ).then(response => 
            console.log(response);
        );

php 文件:

if( !isset($_POST['email']))
   throw new exception (blabla);
    

URL_TO_POST 就像一个“validation.php”,在代码中我检索一些 POST 信息并在那里做一些事情。问题是我不能对 javascript 响应抛出任何异常!对此有什么想法吗?注意:我没有使用 ajax 发布,因为我试图只使用 js 代码保持简单和干净。 谢谢!

【问题讨论】:

抛出异常你期望什么? 我的意思是,不是完全抛出异常,而是向用户发送反馈。如果用户输入了错误格式的电子邮件等 发送不是200的状态码。 发送不是200的状态码是返回错误给api的唯一方法吗? 然后发送json。发送 xml。发送纯文本。随便。 【参考方案1】:

在您的 JavaScript 中,您可以使用拒绝处理程序来处理发送到服务器的无效数据:

fetch(
  URL_TO_POST, 
  
    method: 'post',
    body: new FormData(document.querySelector('form'))
  
)
.then(
  function(response) 
    //https://httpstatuses.com/422
    if (response.status === 422) 
      return Promise.reject(response.json());
    
    //check for other things that could have gone wrong
    return response.json();
  
).then(
  function(json) 
    console.log("received success json",json)
  
  ,function(json) 
    console.log("received reject json",json)
  
)

不清楚你用什么PHP,但你可以用一些json提供422的状态码:

http_response_code(422);
echo json_encode(array("error" => "missing field", "field" => "email"));

【讨论】:

以上是关于将 PHP 异常返回到 javascript FETCH API的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Javascript 调用 PHP 文件并将数据从 PHP 返回到 Javascript

PHP-PDO:我如何将一些值返回到 javascript 中以在视图上呈现?

如何在javascript中将数组从php返回到ajax响应

带有双引号的 JAVASCRIPT var 到 PHP 并返回用于自动填充

遇到致命异常时如何让 php 返回 500?

Javascript 到 PHP PDO 到 MySQL 查询返回空