文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

从微信小程序到鸿蒙JS开发【03】-fetch获取数据&简单天气预报

2024-12-03 11:05

关注

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/

在微信小程序中,若需要向远程服务器请求数据,使用wx.request接口即可。


那么在鸿蒙js开发中,请求远程服务器需要如下几步:

1、在config.json配置网络权限和信任域名。

网络权限的配置是在module.reqPermissions中,配置以下三个权限。工具有提示,还是比较友好的。

  1.   "module": { 
  2.     "reqPermissions": [ 
  3.       { 
  4.         "name""ohos.permission.GET_NETWORK_INFO" 
  5.       }, 
  6.       { 
  7.         "name""ohos.permission.SET_NETWORK_INFO" 
  8.       }, 
  9.       { 
  10.         "name""ohos.permission.INTERNET" 
  11.       } 
  12.     ], 
  13. ...... 

 信任域名的配置是在deviceConfig中,默认是一个空对象,需配置成如下形式。

  1. "deviceConfig": { 
  2.   "default": { 
  3.     "network": { 
  4.       "usesCleartext"true
  5.       "securityConfig": { 
  6.         "domainSettings": { 
  7.           "cleartextPermitted"true
  8.           "domains": [ 
  9.             { 
  10.               "subdomains"true
  11.               "name""apis.juhe.cn" 
  12.             }, 
  13.             { 
  14.               "subdomains"true
  15.               "name""api.seniverse.com" 
  16.             }, 
  17.             { 
  18.               "subdomains"true
  19.               "name""v.juhe.cn" 
  20.             }, 
  21.             { 
  22.               "subdomains"true
  23.               "name""api.tianapi.com" 
  24.             } 
  25.           ] 
  26.         } 
  27.       } 
  28.     } 
  29.   } 
  30. }, 

 在domains数组中,subdomains为是否信任下级域名,name为域名,无需填写协议。如果请求的服务器域名未配置,是无法请求成功的,且工具不会报错。这里一定记得配置服务器域名。

2、在js文件中引入fetch模块。

鸿蒙js请求远程服务器的模块为fetch,在js文件的最上方需引入该模块。

  1. import fetch from '@system.fetch'

这里也是有提示的。


3、调用fetch.fetch发送请求。

来看一下fetch模块的封装,请求的参数,响应的类型,回调函数都可在对象中定义,和wx.request()基本一致。

  1. export default class Fetch { 
  2.    
  3.   static fetch(options: { 
  4.      
  5.     url: string; 
  6.  
  7.      
  8.     data?: string | object; 
  9.  
  10.      
  11.     header?: Object; 
  12.  
  13.      
  14.     method?: string; 
  15.  
  16.      
  17.     responseType?: string; 
  18.  
  19.      
  20.     success?: (data: IFetch) => void; 
  21.  
  22.      
  23.     fail?: (data: any, code: number) => void; 
  24.  
  25.      
  26.     complete?: () => void; 
  27.   }): void; 

 比如我在页面初始化执行的方法onInit()中请求聚合数据的天气预报接口,就可以这样写:

  1. onInit() { 
  2.       // 加载天气预报 
  3.       fetch.fetch({ 
  4.           url: 'http://apis.juhe.cn/simpleWeather/query?city=%E5%8D%97%E4%BA%AC&key=xxxxxxxxx'
  5.           responseType: 'json'
  6.           success: res => { 
  7.               ...... 
  8.           } 
  9.       }); 
  10.   } 

 4、处理返回数据需调用JSON.parse()。

鸿蒙js开发目前调试功能尚不方便,虽有console.log(), console.info()等方法用于打印日志,但实际运行时并未找到日志的打印。所以我只能在视图中划出一小块区域用于调试。

这里看到虽然responseType已设置为json,但用' . '取其中属性时仍会红线报错,且页面中可以看出并未取到值,可以猜测此时的res.data仍为string类型,需调用JSON.parse()将其转为json类型,随后问题解决。


  1. onInit() { 
  2.        // 加载天气预报 
  3.        fetch.fetch({ 
  4.            url: 'http://apis.juhe.cn/simpleWeather/query?city=%E5%8D%97%E4%BA%AC&key=e4b4e30c713b6e2a24f4a851258c8457'
  5.            responseType: 'json'
  6.            success: res => { 
  7.                console.info(JSON.stringify(res.data)); //并未打印日志 
  8.                let data = JSON.parse(res.data); //必须要加上 
  9.                this.nowWeather = data.result.realtime; 
  10.                let dailyWeather = data.result.future; 
  11.                for(let i in dailyWeather) { 
  12.                    dailyWeather[i].date = dailyWeather[i].date.substr(5, 5); 
  13.                } 
  14.                this.dailyWeather = dailyWeather; 
  15.            } 
  16.        }); 

 

附上天气预报这一部分的代码:

  1. -- 天气 --> 
  2.     "weather"
  3.         "now" if="{{ nowWeather }}"
  4.             "nowPhe"
  5.                 {{ nowWeather.info }} 
  6.              
  7.              
  8.                 {{ nowWeather.temperature }}˚C 
  9.              
  10.             "nowOther"
  11.                  
  12.                     风力风向: {{ nowWeather.direct }} {{ nowWeather.power }} 
  13.                  
  14.                  
  15.                     空气质量: {{ nowWeather.aqi }} 
  16.                  
  17.             
 
  •         
  •  
  •         "daily" if="{{ dailyWeather }}"
  •             for="{{ dailyWeather }}"
  •                 "dailyItem"
  •                      
  •                         {{ $item.date }} 
  •                      
  •                      
  •                         {{ $item.weather }} 
  •                      
  •                      
  •                         {{ $item.temperature }} 
  •                      
  •                  
  •              
  •          
  •              
  •     -- 天气end --> 

    1.  
    2. .weather { 
    3.     background-image: url('./common/weatherbg.jpg'); 
    4.     background-size: contain; 
    5. .weather text { 
    6.     color: #fdfdfd; 
    7. .now { 
    8.     width: 100%; 
    9.     height: 260px; 
    10.     margin-top: 30px; 
    11.     display: flex; 
    12.     align-items: center; 
    13.     justify-content: space-around; 
    14. .now>text { 
    15.     font-size: 60px; 
    16. .nowPhe { 
    17.     margin-left: 20px; 
    18. .nowOther { 
    19.     margin-right: 20px; 
    20.     display: flex; 
    21.     flex-direction: column
    22.     height: 220px; 
    23.     justify-content: space-around; 
    24. .daily{ 
    25.     margin-top: 30px; 
    26.     display: flex; 
    27.     flex-direction: column
    28. .dailyItem{ 
    29.     margin: 0 30px 0 30px; 
    30.     height: 120px; 
    31.     border-bottom: 1px solid #bbbbbb; 
    32.     display: flex; 
    33.     justify-content: space-between
    34.     align-items: center; 

     想了解更多内容,请访问:

    51CTO和华为官方合作共建的鸿蒙技术社区

    https://harmonyos.51cto.com/

    【编辑推荐】
    1. CDN:什么是边缘CDN和虚拟CDN(vCDN)?
    2. 终于有人将数据中台讲清楚了,原来根本不算啥
    3. 4种速度最慢的动态编程语言,你一定用过
    4. 勒索软件攻击将在2021年爆发
    5. 为什么有些高级开发人员不喜欢Python

     

    来源:鸿蒙社区内容投诉

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    软考中级精品资料免费领

    • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

      难度     813人已做
      查看
    • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

      难度     354人已做
      查看
    • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

      难度     318人已做
      查看
    • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

      难度     435人已做
      查看
    • 2024年上半年系统架构设计师考试综合知识真题

      难度     224人已做
      查看

    相关文章

    发现更多好内容

    猜你喜欢

    AI推送时光机
    位置:首页-资讯-后端开发
    咦!没有更多了?去看看其它编程学习网 内容吧
    首页课程
    资料下载
    问答资讯