React Native Get,Post请求_蓋亞光的博客-程序员秘密

技术标签: react-native  post  fetch  get  React Native学习笔记  

React Native为我们提供了fetch框架进行网络请求。

Fetch请求

static async request(url, method, body, params) {
        DEBUG && console.log("#REQUEST NetUtil# [" + method + "] url=" + url + ",body=" + body);
        var timestamp=new Date().getTime()/1000;//当前时间毫秒值
        var user=await AsyncStorage.getItem('user');//缓存本地的用户数据
        var token='';//用户token
        if(user!=null){
            token=JSON.parse(user).token;
        }else{
            token='';
        }
        var sign= await Sign.createSign(params,timestamp);//获取签名
        return new Promise((resolve, reject)=> {
            fetch(url, {
                method: method,
                body: body,
                headers: new Headers({
                    'uid': '867909021770429',
                    'token':token,
                    'timestamp':timestamp,
                    'sign':sign,//签名
                    'Content-Type': 'application/x-www-form-urlencoded',
                    'Connection': 'close'
                }),
            })
                .then((response)=> {
                    if(response.ok){
                        return response.json();
                    }else{
                        reject("服务器错误!");
                    }
                })
                .then((json)=> {
                    DEBUG && console.log("#RESPONSE# NetUitl ["+method+"] url = "+url+", body = "+body+",responseData="+json);
                    if(json.code==Constant.SUCCESS){
                        resolve(json.data);
                    }else{
                        reject(data.msg);
                    }
                })
                .catch((error)=> {
                    DEBUG && console.log("#RESPONSE# NetUitl ["+method+"] url = "+url+", body = "+body+", error="+error);
                    reject("服务器错误!");
                });
        });
    }

通过fetch()函数我们可以指定请求的url,请求的method,请求的body以及请求的headers,fetch函数返回一个Promist对象,请求成功后会返回请求的Response对象,response.ok会过滤掉404,500这些请求错误,通过response.json()方法我们就可以获得JOSN格式的服务器返回给我们的数据。

Get请求

//get请求 params为一个Map对象
    static get(url, params) {
        if (params) {
            let paramsArray = []
            for(var item of params.entries()){
                paramsArray.push(item[0]+'='+encodeURIComponent(item[1]));
            }
            if (url.search(/\?/) === -1) {
   //拼接url
                url += '?' + paramsArray.join('&')
            } else {
                url += '&' + paramsArray.join('&')
            }
    }
        return this.request(url, 'get', undefined, params);
    }

Post请求

//pos请求
    static post(url, params) {
        var body = '';
        for (let item of params.entries()) {
   //拼接body
            body += item[0] + "=" + item[1] + "&";
        }
        body = body.substring(0, body.length - 1);
        return this.request(url, 'post', body, params);
    }

使用

  • get方式
var params = new Map();
        params.set('pageNo', 1);
        params.set('pageSize', 20);
        params.set('version', '1.0.1');
        params.set('platform', 'android');
        params.set('provinceCode', '310000');
        return dispatch=> {
            NetUtil.get(HttpUrl.QUERY_DYNAMIC_LIST, params)
                .then((result)=> {
                    console.log(result);
                    dispatch({
                        type: ActionTypes.ACTION_DYNAMIC_LIST,
                        dynamicList: result,
                    })
                }, (error)=> {
                    console.log('error' + error);
                });
        }
  • post方式
var params=new Map();//请求的参数
        params.set('username',this.state.username);
        params.set('password',this.state.password);
        params.set('cid','53b857f07b3ace9bdb2b99e0d65dc123');
        params.set('loDeviceInfo','AndroidA31');
        params.set('platfrom','Android');
        NetUtil.post(HttpUrl.LOGIN_URL,params)
            .then((result)=>{
                AsyncStorage.setItem("user",JSON.stringify(result));//保存用户数据到本地
                NavigatorRoute.replaceToMainScene(this.props.navigator);//跳转到主页
            },(error)=>{
                ToastAndroid.show(error,ToastAndroid.SHORT);
            });

源码

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/CSDN_GYG/article/details/71210170

智能推荐

Spring Cloud (boot) 集成Sentinel_springboot sentinel_摸大鱼了的博客-程序员秘密

在 Sentinel 里面,所有的资源都对应一个资源名称(resourceName),每次资源调用都会创建一个 Entry 对象。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。

Bellman Ford算法 & Floyd-Warshall算法_G1011的博客-程序员秘密

Bellman Ford算法 & Floyd-Warshall算法Bellman Ford算法Bellman-Ford算法描述Bellman-Ford算法能在一般的情况下解决单源最短路径问题(即允许存在负权边,而Dijkstra算法不允许存在负权边)。Bellman-Ford算法的结果是一个bool值,表明图中是否存在着从源点s可达的负权回路。若不存在这样的回路,算法将给出...

企业微信服务商代开发应用验证CallBackUrl失败_测试熊的博客-程序员秘密

企业微信服务商管理配置第三方代开发应用,将客户的CropID转换成加密后的结果实践

【实习日报】2019年4月下半月 前端开发实习工作日报汇总_前端工作日报_流光D的博客-程序员秘密

以下记录的是今年4月16日-4月30日笔者在公司进行web前端工作的每日工作内容,其中隐去了项目的具体名称、人名、公司名等。2019.4.16今天完成的任务:基本完成了野牛期货客户端的交易页面的light主题显示遇到的问题:今天在修改CSS样式代码时发现了之前在修改样式的代码时的冗余代码,主要在于使用:class指令将vuex中获取到的主题绑定到app.vue文件的最外围标签上即...

基于HTTP的QQ协议之我所见_qinggebuyao的博客-程序员秘密

有一年没有发表文章了,最近我为了一个项目对QQ协议进行研究,有些心得,不敢独享,故把其中一项协议-- 基于HTTP的QQ协议V1.1的不完整成果,拿出来与大家分享一下。 大家说到QQ协议都觉得很神秘,是因为QQ不像MSN或者ICQ协议都已经官方公布了,而QQ的没有公布。研究 它的人也不是特别的多,虽然已经有了基于QQ协议所写成的第三方软件 foicq, qq plugins for g

“Nested exception: 前言中不允许有内容"错误处理_weixin_30755393的博客-程序员秘密

最近在做一个小项目,使用org.dom4j.DocumentHelper.parseText方法时一直报错”Nested exception: 前言中不允许有内容",这个parseText解析的内容是从一个文本文件中读出的.代码大致如下: String content = FileUtil.readAllText(filePath); Document document = Docum...

随便推点

网络测试工具netperf介绍_weixin_33909059的博客-程序员秘密

Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多块的速度接收数据。Net...

SSH Key的生成和使用_yy243的博客-程序员秘密

SSH key生成及其使用 一、检查是否已经存在ssh key通常sshkey会默认生成在用户家目录下,所以查看家目录下是否存在.ssh 文件夹,以及是否存在相关目录就行。(~/.ssh/id_rsa)二、生成key在控制台输入: ssh-keygen -t rsa Note: -t 的意思是选择kye的type。分别有 RSA 和 DSA 两种。具体请自行百度 控

用matlab对二维图像生成立体图像_二维图像转化为立方体_chen493072的博客-程序员秘密

[imagen1 imagepath1]=uigetfile('D:\MATWORKSHOP\source_images\MULTIFOCUS\*.jpg;*.bmp;*.png;*.tif;*.tiff;*.pgm;*.gif','Please choose the first input image');f=imread(strcat(imagepath1,imagen1)); [high...

字符串转int_字符串int_weixin_39087379的博客-程序员秘密

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。python 库函数 int(s),str(t),不能用每个字符判断,进行转换,缺少溢出处理:class Solution {public: int StrToInt(string str) { int i=0; long int res=0; int len=str.length(); if (len<=0)

华为oj之求int型正整数在内存中存储时1的个数_大白技术控的博客-程序员秘密

题目: 求int型正整数在内存中存储时1的个数热度指数:4427 时间限制:1秒 空间限制:32768K题目描述输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。输入描述: 输入一个整数(int类型)输出描述: 这个数转换成2进制后,输出1的个数输入例子:5输出例子:2在线提交网址: http://www.nowcoder.com/practice/440

数据库知识归纳(面试向)_weixin_33851604的博客-程序员秘密

---->数据库分类 数据库可分为关系型数据库(Sql)和非关系型数据库(NoSql) Sql: mysql、sqlserver、oracle NoSql: 1)键值对数据库:redis、memcache 2)列存储数据库:hbase 3)文档型数据库:mongdb 4)图形数据库:graph?--- 区别 1.关系型数据库通过外键...

推荐文章

热门文章

相关标签