react获取服务器APi接口的数据:

react中没有提供专门的请求数据的模块。但是我们可以使用任何第三方请求数据模块实现请求数据

一、axios 获取Api数据

使用文档:https://www.npmjs.com/package/axios

git项目地址:https://github.com/axios/axios

axios的作者觉得jsonp不太友好,推荐用CORS方式更为干净(后端运行跨域)

npm官网:https://www.npmjs.com,在其搜索:axios即可看到详细说明。接下来cmd运行:

1、安装axios模块 npm install axios  --save   /  cnpm install axios  --save
(--save必加,表示把模块写入配置文件,否则别人无法运行;建议用cnpm 前者容易失败) 2、在哪里使用就在哪里引入 import axios from 'axios' 3、看文档使用

【调用api关键代码】:

var api='http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20';
axios.get(api)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});

【axios完整示例】:

  1. 首先,在[ src/components/ ]目录下建两个文件:[home.js]、[axios.js];
  2. api示例地址:http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20

    //【 Api接口要在服务器上提前设置允许跨域,否则请求不到数据】

  3. 实现:从指定的Api接口获取数据展示出来

【home.js】

import React,{Component} from 'react';
import Axios from './axios.js'; class Home extends Component{
constructor(props){
super(props); this.state={
title:'首页模块'
}
} render(){
return(
<div>
<h1 >从服务器Api接口获取数据示例</h1> <Axios />
</div>
)
}
}
export default Home;

【axios.js】

import React, { Component } from 'react';
import axios from 'axios'; //【1】获取axios模块(从服务器获取数据模块) class Axios extends Component {
constructor(props){
super(props); this.state={
list:[]
}
} //【2】获取Api数据函数
getApi=()=>{
// Api接口要在服务器上提前设置允许跨域
let api='http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20'; axios.get(api) //获取Api主函数
.then((response)=>{ //获取到则执行:(其下要用到this,所以要用箭头函数)
console.log(response);
//把获取到的数据设置到state的list里
this.setState({
list:response.data.result
})
})
.catch((error)=>{//获取失败则执行 (其下要用this,所以用箭头函数)
console.log(error);
});
} render() {
//【3】视图部分:展示api数据
return (
<div>
<button onClick={this.getApi}>获取服务器Api数据</button>
<br/><hr/>
<ul>
{this.state.list.map((value,key)=>{
return <li key={key}>{value.title}</li>
})
}
</ul>
</div>
);
}
}
export default Axios;

【效果】:

二、fetch-jsonp 获取json数据

详细使用文档:https://www.npmjs.com/package/fetch-jsonp

git项目地址:https://github.com/camsong/fetch-jsonp

1、安装 npm install fetch-jsonp  --save /   cnpm install fetch-jsonp  --save
2、import fetchJsonp from 'fetch-jsonp'
3、看文档使用
4、与axios区别,它可以读取jsonp数据,此数据支付跨域,不需要在服务器设置
fetchJsonp('/users.jsonp')
.then(function(response) {
return response.json()
}).then(function(json) {
console.log('parsed json', json)
}).catch(function(ex) {
console.log('parsing failed', ex)
})

fetch-jsonp项目实例

1、接口:http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&callback=myjsonp

2、接口首先要支持jsonp,测试方法在最后加 &callback=myjsonp,返回结果会变成如下:



3、和第一种明显区别就是请求地址多了个&callback=xxx

4、在[ src/components/ ]目录下建两个文件:[home.js]、[fetchjson.js];

【home.js】

import React,{Component} from 'react';
import Fetchjson from './fetjson'; class Home extends Component{
constructor(props){
super(props); this.state={
title:'首页模块'
}
} render(){
return(
<div>
<h1 >从服务器jsonp接口获取数据示例</h1>
<Fetchjson />
</div>
)
}
}
export default Home;

【fetchjson.js】

import React, { Component } from 'react';
import fetchJsonp from 'fetch-jsonp'; //【1】获取jsonp模块(从服务器获取数据模块) class Fetchjson extends Component {
constructor(props){
super(props); this.state={
list:[]
}
} //【2】获取jsonp数据函数
//api接口最后要有&callback=xxx。有些服务器会自动加,如不自动加就要手动在地址加上
getJsonp=()=>{
//获取数据
var api="http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20";
fetchJsonp(api)
.then(function(response) {//先转化成json格式;固定写法
return response.json()
}).then((json)=> { //此处要用到this.所以加箭头函数;
console.log(json);
this.setState({
list:json.result
})
}).catch(function(ex) {// 获取失败报错
console.log('未成成功获取', ex)
})
} render() {
//【3】视图部分:展示数据
return (
<div>
<button onClick={this.getJsonp}>获取服务器Jsonp数据</button>
<br/><hr/>
<ul>
{this.state.list.map((value,key)=>{
return <li key={key}>{value.title}</li>
})
}
</ul>
</div>
);
}
}
export default Fetchjson;

【效果】:



【请求数据效果】可以看到虽然我们没加callback但服务器自己帮我们加上了:

三、其他请求数据的方法也可以...

  • 自己封装模块用原生js实现数据请求. 也可以...

远程测试API接口:

get请求:

http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20

jsonp请求地址:

http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&callback=?

十一、React 获取服务器数据: axios插件、 fetch-jsonp插件的使用的更多相关文章

  1. XMLHTTPRequestObject获取服务器数据

    http://www.educity.cn/develop/526316.html 在Web客户端使用xmlhttp对象,可以十分方便的和服务器交换数据,我们可以获取和发送任何类型的数据,甚至二进制数 ...

  2. nodejs获取服务器数据到页面

    const Koa = require('koa'); const Router = require('koa-router'); const app = new Koa(); const route ...

  3. React 获取服务器API接口数据:axios、fetchJsonp

    使用axios.fetchJsonp获取服务器的接口数据.其中fetchJsonp是跨域访问 一.使用axios 1.安装axios模块 npm install --save axios 2.引用模块 ...

  4. jsonp获取服务器数据的方式

    jsonp获取服务器的数据,有两种 一,跨域 二,不跨域 如果跨域 js的写法有两种 1, <script type="text/javascript"> $(func ...

  5. Android-----使用SoapObject获取服务器数据

    新建两个工具类ConnectWeb.java 和 ConnectMethod.java 进行对服务器进行数据交互 ConnectWeb.java代码如下: public class ConnectWe ...

  6. 【CMDB】获取服务器数据

    一.通过agent的方式 原理:服务器定制执行py文件通过subprocess模块采集数据发送给数据收集的机器 数据收集的机器:192.168.11.62 服务器:192.168.11.169 数据收 ...

  7. IOS开发之Post 方式获取服务器数据

    //1.创建post方式的 参数字符串url +(NSString *)createPostURL:(NSMutableDictionary *)params { NSString *postStri ...

  8. Flutter 获取服务器数据

    文档 文档版本有些老 使用 dio 来获取数据 demo import 'dart:io'; import 'dart:convert'; import 'package:flutter/materi ...

  9. Reactjs之Axios、fetch-jsonp获取后台数据

    1.新增知识点 /** Axios获取服务器数据(无法跨域,只能让后台跨域获取数据) react获取服务器APi接口的数据: react中没有提供专门的请求数据的模块.但是我们可以使用任何第三方请求数 ...

随机推荐

  1. Html转图片 -- wkhtmltox

    关于wkhtmltox,是一个可以把HTML转换为图片和pdf的工具. 不多介绍了,详见官网 https://wkhtmltopdf.org/ PHP 扩展 https://github.com/kr ...

  2. jqGrid 复选框实现单选

    参考:https://blog.csdn.net/java0311/article/details/45575517

  3. Linux中用systemctl命令管理服务

    systemctl start foo.service 启动服务systemctl restart foo.service 重启服务systemctl stop foo.service 停止服务sys ...

  4. Iterator作用

    前言 下面的内容是我从百度知道拷贝出来的,也就不在贴出链接了.我总结下就是迭代器在集合中使用,用户不需要关心具体集合实现的是如何遍历(不暴露细节),按照迭代器的方式遍历. 作用 Iterator模式是 ...

  5. php 实现店铺装修5

    /** * @title 选中蜂店装修模板样式 * @param plate_id 是 int 商品(平台或特色)装修样式ID * @param type_id 是 int 要装修商品的类型(1-平台 ...

  6. PLSQL Developer配置Oralce11g连接

    您的位置:首页 → 资讯教程 → 编程开发 → PLSQL Developer配置Oralce11g连接 PLSQL Developer配置Oralce11g连接 时间:2015/2/3 8:36:2 ...

  7. 让Nutz支持最快的模板引擎Smarty4j

    Smarty4j是一个开源的模板引擎.没错,它就是著名的php模板引擎之Java移植版. 它特点就是将模板文件或者字符串编译成java类直接执行,所以效率比一般的模板解释的方式处理要快.它发展较晚,所 ...

  8. 针对小文件的spark wholeTextFiles()

    场景:推送过来的数据文件数量很多,并且每个只有10-30M的大小 spark读取hdfs一般都是用textfile(),但是对于这种情况,如果使用textFile默认产生的分区数将与文件数目一致,产生 ...

  9. 二十一 JDK注解&注解案例

    什么是注解? 注解和接口,类属于同一个级别 注解可以在变量.方法.类上加载 注解可以有属性也可以没有属性 注解是有作用范围(源码.编译期间,运行期间) 源码期间:例如String类上@Author  ...

  10. 如何解决 Django 前后端分离开发的跨域问题

    一.同源策略 1.先来说说什么是源 • 源(origin)就是协议.域名和端口号. 以上url中的源就是:http://www.company.com:80 若地址里面的协议.域名和端口号均相同则属于 ...