【问题标题】:I am getting post response in network tab but still shows error in console我在网络选项卡中收到回复,但在控制台中仍然显示错误
【发布时间】:2019-06-17 06:38:30
【问题描述】:

我正在用 Angular 编写一个 post 方法来发布一些我在 Codeigniter 中返回 JSON 的数据。

这是服务:

public userlogin(data) {
  let uploadURL = `myurl`;

  const requestOptions: Object = {
    responseType: 'json'
  }    
   return this.http.post<any>(uploadURL, data,requestOptions).pipe(map((responce) => {
    console.log(responce);
    return responce;
  })
  );
}

在我的组件中:

this.services.postuser(formData).subscribe(
  (data) => {
    console.log(data);
  }
);

以下错误,我进入控制台

这是我的网络选项卡的屏幕截图,其中响应为 JSON

我经历了很多堆栈溢出问题和答案,但解决方案对我不起作用。 我还将 post 方法响应从 JSON 更改为 text 并将 post 方法中的响应类型更改为 text 仍然收到相同的错误。

后台功能:

public function user_login()
    {
    if(is_array($_POST) && sizeof($_POST) >0){

       $where_array = array(
        'username'=>$this->input->post('username'),
        'password'=>$this->input->post('password')
        );

            $result = $this->Admin_model->checkuser($where_array);
            // print_r($result); die;
            if($result == "user not found" || $result == "incorrect password")
            {
                $json_data = array("Code"=>"1","data"=>$result);
                echo json_encode($json_data, JSON_UNESCAPED_SLASHES);

            }else{
                 $json_data = array("Code"=>"0","data" => "Login successfull");
                 echo json_encode($json_data, JSON_UNESCAPED_SLASHES);
            }
     }   
 }

【问题讨论】:

  • 错误响应也可以包含响应正文。这就是这里发生的事情。
  • 能否详细说明。很多答案让我很困惑,我到底应该怎么做
  • official doc 拥有一切。向下滚动到错误处理。
  • 根据官方文档我做了错误处理我得到了错误---->后端返回代码0,正文是:[object ProgressEvent]

标签: angular codeigniter http response


【解决方案1】:

自己解决:

我发现问题不在于我发送的请求或响应。 实际上,这是一个cors错误,因为服务器没有设置接受跨域请求。

首先,我安装this Firefox 扩展来测试问题,然后我得到了响应。

所以经过测试,在我的 ci 文件中,我将原点设置为 '*' 以允许所有原点。

header("Access-Control-Allow-Origin: *");

【讨论】:

    【解决方案2】:

    根据我使用 asp.net 核心后端(sql 数据库)和 NodeJS express 后端(mongoDB)的个人经验

    在 Angular 前端内部:

    在我的返回 Observable 的服务中 只需返回 post 请求,如下所示:

    return this.http.post(url, data, options);
    

    在使用该服务的组件中将是这样的:

    this.service.postMethod(data).subscribe((res)=>{}, (err)=>{});
    

    【讨论】:

    • 如果您使用 json 响应,请执行以下操作:JSON.stringify(res)
    • 检查来自后端的错误,首先使用这个 Object.getOwnPropertyNames() 获取错误属性;并确保您以与后端读取相同的方式发送数据对象,属性名称必须匹配
    • 和选项,不要向后端发送不必要的选项
    • 是的,我这样做了,现在我得到后端返回代码 0,正文是:[object ProgressEvent]
    • 所以如果在 ProgressEvent 进行时发生错误,我认为当 HttpClient 将数据发布到后端时出现问题,你能在后端给我响应代码吗?
    【解决方案3】:

    还要设置内容类型 json,这样它就不会抛出任何其他错误。

    将以下代码放在 php 文件的顶部:

    header('Access-Control-Allow-Origin: *');
    header('Content-Type: application/json');
    

    请参考answer.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 2014-09-03
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      相关资源
      最近更新 更多