Fetoris 2019-06-25 09:54 采纳率: 0%
浏览 739

ionic4 post请求返回的数据在浏览器上是json格式,在android真机上返回却是html页面

我的项目是ionic4项目,angular的版本是angular7,写了个登陆页面在浏览器上测试是可以的返回的数据也是json格式,但是拿到手机测试,返回的数据就变成了html页面,内容大概就是项目中index.html中html;
头里面的responseType如果默认是json,那么直接就会报http failure during parsing for .... ,因为返回的是html所以无法解析;将responseType设置成text,就看到了返回是个html页面。

下面贴出部分的代码。。。

http服务

Login(userName: string, password: string) {
        let params = {"request":{"user_name":userName,"password":password,"user_auth":1}};
        const httpOptions ={
            headers:new HttpHeaders({
                'Content-Type':'application/json;chatset=UTF-8',
            }),
        };
        return this.http.post(this.loginUrl,JSON.stringify(params),httpOptions);
    }

页面组件

this.http.Login(username,password).subscribe(
              (data:any)=>{
                  if(data.success=true){
                      this.loginError='成功';
                      alert('登录成功');
                      // sessionStorage.setItem('permission','true');
                      this.router.navigateByUrl('/main');
                  }
                  else if(data.success=false){
                      this.loginError=data.error+'错误';
                      alert('登录失败');
                  }
              },
              error =>{
                  this.loginError="登陆失败"+JSON.stringify(error);
              }

跨域我也做了处理

proxy.config.json文件

图片说明

angular.json文件

图片说明

    最终发现,在浏览器上需要使用跨域处理,但是在android真机上不用,直接将angular.json文件中的proxyConfig删除,http请求的URL直接写全路径,设置的httpOption也要删除。
    然后,重新打包测试,登陆成功了。
  • 写回答

1条回答 默认 最新

  • 她嫌我菜呜呜呜 2024-04-17 12:09
    关注

    根据你描述的情况,看起来你的问题可能与跨域请求以及 Ionic 应用的配置有关。在浏览器上运行时,Angular CLI 的代理配置可以帮助你解决跨域问题,但在真机上运行时,这个代理配置可能不再适用。

    当你在真机上运行时,Ionic 应用实际上是在一个本地的 WebView 中运行,而不是在一个标准的浏览器中。因此,针对跨域问题,通常需要在后端服务器上进行相应的 CORS 配置,而不是依赖 Angular CLI 的代理配置。

    解决这个问题的一个常见方法是在后端服务器上配置 CORS,允许来自 Ionic 应用的跨域请求。你可以在后端服务的配置中添加允许跨域请求的头部,具体方法取决于你使用的后端技术栈,比如 Express、Django、Spring 等。

    另外,确保你的移动应用中的请求 URL 是正确的,并且可以访问到后端服务。你可以在浏览器中尝试直接访问这些 URL,以确保它们能够正常返回 JSON 数据。

    最后,确保在请求中设置了正确的请求头和响应类型。你在示例代码中已经设置了正确的请求头 Content-Type: application/json,但你也可以尝试在请求头中添加 Accept: application/json 来明确告知服务器返回 JSON 格式的数据。同时,确保后端服务返回的是正确的 JSON 数据格式。

    通过这些步骤,你应该能够解决在真机上接收到 HTML 响应而不是 JSON 数据的问题。如果问题仍然存在,可以考虑在 Ionic 应用中添加一些日志输出,以便更好地调试和定位问题所在。

    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办