【问题标题】:Angular httpClient - not catching PHP error object [duplicate]Angular httpClient - 没有捕获PHP错误对象[重复]
【发布时间】:2021-06-25 18:55:24
【问题描述】:

我的任务是连接到一个旧的 php 登录 api,它只返回一个成功或错误消息响应对象。

当我使用正确的凭据连接时,我会收到成功对象,而当我没有收到错误时。太好了!

但是,httpClient 似乎没有识别错误对象。因此,无论是否成功,该对象都被接受为成功的响应对象。

两行相关的php代码:

$response = array("error" => "Combinación user-pass errónea", "success" => false, "status" => 500, "message" => "Error");
echo $json_response = safe_json_encode($response);

然后我在错误响应中添加了几个属性,希望它被识别:

$response = array("error" => "Combinación user-pass errónea", "success" => false, "status" => 403, "message" => "Error");

运气不好……

然后,我将 observable 转换为 Promise,以使该过程尽可能接近使用相同登录 api 的 AngularJS 应用程序上使用的代码:

let httpOptions = {
  headers: new HttpHeaders(
    { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }),
};

let params = new HttpParams({
  fromObject: { action: "login", username: credentials.username, password: credentials.password },
});

this.httpClient.post(`http://xxxxxxxxxxx/user_controller.php`, params.toString(), httpOptions).toPromise()
.then( data => console.log(data),
        err => console.log(err) );

仍然没有运气......

【问题讨论】:

  • “但是,httpClient 似乎没有识别错误对象。”您是否设置了 HTTP 响应代码以指示错误情况?

标签: php angular httpclient


【解决方案1】:

$http.error 处理程序由 500 或 401 等服务器错误触发; 如果您希望因登录错误而触发 401 错误(未经授权),请执行以下操作:

if ($loginFailed) {
  header("HTTP/1.1 401 Unauthorized");
  exit;
}

您的 Angular 代码会将其视为错误。

如果你想继续以你当前的方式发送错误,请在成功回调中接收它们,因为根据服务器调用实际上是成功的。

this.httpClient.post(`http://xxxxxxxxxxx/user_controller.php`, params.toString(), httpOptions).toPromise()
.then( data => { 
    console.log(data); 
    if (JSON.parse(data).error) this.triggerErrorResponse(data.error); 
  }, err => console.log(err) );

【讨论】:

    猜你喜欢
    • 2022-07-23
    • 2014-01-01
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多