网络请求数据处理问题

一直被请求数据的返回处理困扰,拿到了数据,却一直取不到想要的值,demo如下:

import http from '@ohos.net.http'; 
// 每一个httpRequest对应一个HTTP请求任务,不可复用 
let httpRequest = http.createHttp(); 
let requestUrl = "https://example/uniapp/"; 
httpRequest.request(requestUrl, { 
  method: http.RequestMethod.POST, // 可选,默认为http.RequestMethod.GET 
  // 开发者根据自身业务需要添加header字段 
  header: { 
    'Content-Type': 'application/json' 
  }, 
  readTimeout: 60000, 
  connectTimeout: 60000, 
  // 当使用POST请求时此字段用于传递内容 
  extraData: { 
    action: "login", 
    username: this.account, 
    password: this.password, 
  }, 
}, (err: BusinessError, data: http.HttpResponse) => { 
  if (!err) { 
 
    // data.result为HTTP响应内容,可根据业务需要进行解析 
    console.info('' + data.result); 
    let qq = `''` + data.result; 
    if (JSON.parse(qq).code == 200) { 
      // let resdata = ''+ JSON.parse(qq).data; 
      // console.log(JSON.parse(resdata)); 
      // resdata = JSON.parse(resdata); 
      // console.log(resdata); 
    } 
    prompt.showToast({ 
      message: JSON.parse(qq).msg 
    }) 
 
    // 当该请求使用完毕时,调用destroy方法主动销毁 
    httpRequest.destroy(); 
  } else { 
    console.error('error:' + JSON.stringify(err)); 
    prompt.showToast({ 
      message: JSON.stringify(err) 
    }) 
    // 取消订阅HTTP响应头事件 
    httpRequest.off('headersReceive'); 
    // 当该请求使用完毕时,调用destroy方法主动销毁 
    httpRequest.destroy(); 
  } 
});

其中请求字段username和password为账密,正确的为: username:test , password:test123,需求是提示登录成功后获取返回结果里data的元素,另外该data数组里的元素不固定,会有添加的可能,请问我要如何获取里面的元素呢,我用常规写法一直提示undefined, 我需要根据返回的字段(‘code’)进行判断,然后进行弹窗,弹窗文本内容为返回的字段(‘msg’),以及当code=200时,获取data数组里的相关字段,比如(‘names’和‘id’),常规写法应为:data.result.data.names,可是一直报错,能帮忙看看如何处理吗?

HarmonyOS
2024-09-10 12:41:34
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

解决案例参考如下:

import http from '@ohos.net.http'; 
@Entry 
@Component 
struct WebComponent { 
  build() { 
    Column() { 
      Text("网络请求测试").onClick(()=>{ 
        //------------ 
        class ResponseResult  { 
          code: number = 0 
          msg: string = '' 
          data:Record<string, Object>={} 
          foo(str: string) { 
            let tmpStr: Record<string, Object> = JSON.parse(str); 
            if (tmpStr.code != undefined) { 
              this.code = tmpStr.code as number; 
              this.msg = tmpStr.msg as string; 
              this.data = tmpStr.data as Record<string, Object> 
            } 
          } 
        } 
        let responseResult:ResponseResult = new ResponseResult(); 
        //---------------------- 
        let httpRequest = http.createHttp(); 
        let requestUrl = "https://example/uniapp/"; 
        httpRequest.request(requestUrl, { 
          method: http.RequestMethod.POST, // 可选,默认为http.RequestMethod.GET 
          // 开发者根据自身业务需要添加header字段 
          header: { 
            'Content-Type': 'application/json' 
          }, 
          readTimeout: 60000, 
          connectTimeout: 60000, 
          // 当使用POST请求时此字段用于传递内容 
          extraData: { 
            action: "login", 
            username: "test" , 
            password: "test123" , 
          }, 
        }, (err, data) => { 
          if (!err) { 
            //成功的处理逻辑 
            httpRequest.destroy(); 
          } else { 
            //开始 
            responseResult.foo('{"code":"200","msg":"登陆成功","data":{"name":"test","id":"123"}}') 
            console.info(JSON.stringify(responseResult.msg)); 
            console.info(JSON.stringify(responseResult.code+'')); 
            console.info(JSON.stringify(responseResult.data.name+'')); 
            console.info(JSON.stringify(responseResult.data.id+'')); 
            //结束  这边本地测试可以打印出需要的信息 
            console.info('error:' + JSON.stringify(err)); 
            httpRequest.off('headersReceive'); 
            httpRequest.destroy(); 
          }}); 
      }).backgroundColor(Color.Blue).width(100).
分享
微博
QQ
微信
回复
2024-09-10 18:06:18
相关问题
网络请求数据后的处理
311浏览 • 1回复 待解决
PixelMap数据处理(Native)
1062浏览 • 1回复 待解决
列表滑动惯性处理问题
165浏览 • 1回复 待解决
JSON.parse数据处理导致精度丢失问题
150浏览 • 1回复 待解决
HarmonyOS @ohos.data.preferences 数据处理
94浏览 • 1回复 待解决
网络请求使用gzip压缩数据
1900浏览 • 1回复 待解决
网络请求创建后,持久化问题
519浏览 • 1回复 待解决
HarmonyOS网络请求后JSON转换问题
565浏览 • 1回复 待解决
网络请求-GET请求传参
328浏览 • 1回复 待解决
HarmonyOS 接口请求处理
54浏览 • 1回复 待解决
HarmonyOS http请求的JSON数据定义问题
98浏览 • 1回复 待解决
HarmonyOS WebView拦截网络请求
277浏览 • 1回复 待解决
网络请求:gzip压缩使用
293浏览 • 1回复 待解决