十一、React 获取服务器数据: axios插件、 fetch-jsonp插件的使用

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=?

原文地址:https://www.cnblogs.com/chenxi188/p/11881292.html

时间: 2024-08-28 14:33:47

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

nodejs获取服务器数据到页面

const Koa = require('koa'); const Router = require('koa-router'); const app = new Koa(); const router = new Router(); const views = require('koa-views'); const json = require('koa-json'); const onerror = require('koa-onerror'); const bodyparser = req

跨域获取服务器数据方式

学习AJAX跨域获取数据碰到这个问题,特此记录. 理解跨域首先必须要了解同源策略.同源策略是浏览器上为安全性考虑实施的非常重要的安全策略. 同源是什么?URL由协议.域名.端口和路径组成,如果两个URL的协议.域名和端口相同,则表示他们同源. 为什么需要同源? 假设从一个恶意网站打开支付宝或其他重要的页面(通过window.open),如果没有同源限制,恶意网页上的javascript脚本就可以任意操作你打开的支付宝等网页,这是极其危险的. 由于同源策略的限制,XmlHttpRequest只允许

2017.12.07 Ajax获取服务器数据并发送到前端

1.前端:在React渲染页面之前就加载服务器数据: componentWillMount() { console.log("aaaaaaaa"); var data2={ action:"queryTaskOfManager" }; Common.getData(JSON.stringify(data2),function (ret) { alert(ret); }); } 2.前端调用这个React生命周期函数: 3.ajax文件封装成组件后,导出: 4.Aja

android 简单获取服务器数据

1.activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

智能机器人“小昆”的实现(二)获取服务器数据工具类的编写及测试

没有取得图灵机器人认证的朋友可以看上一篇,点击下面的地址即可: http://www.cnblogs.com/fuly550871915/p/4852148.html 已经取得认证的朋友,可以继续往下做了.下面就开始我们的实际代码编写.在这篇文章中,我们要实现通过调用图灵机器人API获取返回的数据的功能.而且搭建相应的测试环境,看看我们这个功能实现的到底正确不正确. 一.获得服务器返回数据的工具类的实现 主要是android中的简单的网络编程知识的运用.代码如下: 1 package com.f

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

1.新增知识点 /** Axios获取服务器数据(无法跨域,只能让后台跨域获取数据) react获取服务器APi接口的数据: react中没有提供专门的请求数据的模块.但是我们可以使用任何第三方请求数据模块实现请求数据 axios介绍: https://github.com/axios/axios axios的作者觉得jsonp不太友好,推荐用CORS方式更为干净(后端运行跨域) 1.安装axios模块npm install axios --save / npm install axios --

Vue数据请求 axios vs fetch

Vue数据请求 数据请求在前端开发中的使用有两种形式 使用原生javascript提供的数据请求 ajax( 四部曲,一般需要我们结合Promise去封装,使用不是很便利,但是效率很高 ) fetch( 本身结合了Promise,并且已经做好了封装,可以直接使用 ) 使用格式: 使用别人封装好的第三方库目前最流行的,使用率最高的是 axios vue中我们最常使用的 vue 1.x 的版本提供了一个封装库 vue-resource , 但是到了vue 2.x版本之后,这个就弃用了vue-reso

android 从服务器获取新闻数据并显示在客户端

新闻客户端案例 第一次进入新闻客户端需要请求服务器获取新闻数据,做listview的展示, 为了第二次再次打开新闻客户端时能快速显示新闻,需要将数据缓存到数据库中,下次打开可以直接去数据库中获取新闻直接做展示. 总体步骤: 1.写布局listview ok 2.找到listview,设置条目的点击事件. ok 3.获取数据提供给listview做展示. 3.1:获取本地数据库缓存的新闻数据,让listview显示.如果没有网络不至于显示空界面. 3.2:请求服务器获取新闻数据,是一个json字符

PDO获取数据的方法fetch()、fetchAll()、setFetchMode()、bindColumn()

PDO的数据获取方法与其他数据库扩展都非常类似,只要成功执行SELECT查询,都会有结果集对象产生.不管是使用PDO对象中的query()方法,还是使用prepare()和execute()等方法结合的预处理语句,执行SELECT查询都会得到相同的结果集对象PDOStatement.都需要通过PDOStatement类对象中的方法将数据遍历出来.下面介绍PDOStatement类中常见的几个获取结果集数据的方法. 1.fetch()方法 PDOStatement类中的fetch()方法可以将结果