【问题标题】:Returning an exception with PHP to javascript FETCH API将 PHP 异常返回到 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。发送纯文本。随便。

标签: javascript php api asynchronous fetch-api


【解决方案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"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2020-02-29
    • 2015-07-16
    • 2012-04-02
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多