背景故事:同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,

如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,

浏览器只是针对同源策略的一种实现。

现在所有支持JavaScript 的浏览器都会使用这个策略。

所谓同源是指,域名,协议,端口相同。

当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面

当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,

即检查是否同源,只有和百度同源的脚本才会被执行。

如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。

页面展示:

我们页面上会展示一个日期时间及天气情况,我们怎么实现这两个功能呢?

1:关于日期:我用一个工具类来封装我们的日期函数,最后再页面上再调用

新建utils文件夹及utils文件,我们导出一个formate函数

  1. export default {
  2. formateDate(time){
  3. if(!time)return '';
  4. let date=new Date(time)
  5. return date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate()+'--'+date.getHours()+':'+date.getMinutes()+':'+date.getSeconds();
  6. }
  7. }

希望在我们的页面上展示这个日期函数,我们需要

  1. componentWillMount(){
  2. this.setState({
  3. userName:'jser'
  4. })
  5. setInterval(()=>{
  6. let sysTime=Util.formateDate(new Date().getTime())
  7. this.setState({
  8. sysTime
  9. })
  10. },1000)
  11. }
  1. <span className="date">{this.state.sysTime}</span>

关于天气的展示,我们用到了百度天气api,它的使用就是通过请求http://api.map.baidu.com/telematics/v3/weather?location。。。获取数据。

这个时候,我的浏览器环境是本地的URL地址,我怎么能够请求到百度的地址呢?又不是同源的。这个时候,就要用到我们的jsonp了。

通过yarn add jsonp --save

我们来对jsonp方法做一封装,让所有地方都能使用

  1. import JsonP from 'jsonp'
  2. export default class Axios{
  3. static jsonp(options){
  4. return new Promise((resolve,reject)=>{
  5. JsonP(options.url,{
  6. param:'callback'
  7. },function(err,response){
  8. if(response.status=='success'){
  9. resolve(response)
  10. console.log(response)
  11. }else{
  12. reject(response.message)
  13. }
  14. })
  15. })
  16. }
  17. }

我们通过import axios from '../../axios'引入这个文件,封装我们的jsonp方法,接着在我们的项目中使用

  1. getWeatherAPIData(){
  2. let city="深圳"
  3. axios.jsonp({
  4. url:'http://api.map.baidu.com/telematics/v3/weather?location='+encodeURIComponent(city)+'&output=json&ak='神奇
  5. }).then((res)=>{
  6. //项目公共机制
  7. console.log(res)
  8. if(res.status=='success'){
  9. let data=res.results[0].weather_data[0];
  10. this.setState({
  11. dayPictureUrl:data.dayPictureUrl,
  12. weather:data.weather
  13. })
  14. }
  15. })
  16. }

接着让数据展示即可

  1. <img src={this.state.dayPictureUrl} alt=""/>
  2. </span>
  3. <span className="weather-detail">
  4. {this.state.weather}
  5. </span>

react中跨域请求天气预报接口数据的更多相关文章

  1. HTML中跨域请求天气粗略效果

    HTML中跨域请求天气粗略效果 html+css部分: <style> table{ border:1px red solid; border-collapse: collapse; ma ...

  2. js中跨域请求原理及2种常见解决方案

    一.同源策略: 说到跨域请求,首先得说说同源策略: 1995年,同源政策是由 Netscape 公司引入浏览器的.目前,所有浏览器都实行了这个政策. 同源策略是浏览器的一种安全策略,所谓同源是指,域名 ...

  3. JSONP分享-- 在JavaScript中跨域请求

    如果你正在开发一个现代的基于web的应用程序,那么你: 在客户端使用JavaScript. 需要集成那些没有完全在你控制之下的服务(或者那些来自不同的域). 在你的浏览器控制台中遇到过这个错误信息: ...

  4. JSONP 跨域请求 - 获取JSON数据

    如何用原生方式使用JSONP? 下边这一DEMO实际上是JSONP的简单表现形式,在客户端声明回调函数之后,客户端通过script标签向服务器跨域请求数据,然后服务端返回相应的数据并动态执行回调函数. ...

  5. 【React自制全家桶】七、React实现ajax请求以及本地数据mock

    一.下载axios插件 yarn add axios 二.React的ajax请求代码如何放置 建议放置在生命周期函数之componentDidMount()中 三.ajax之get请求 axios. ...

  6. WebApi中跨域请求的解决方案和原理

    跨域请求仅发生在JavaScript发起Ajax请求时,浏览器对请求的限制,通常只允许访问同一个域中的资源,或者目标服务器明确的通知浏览器允许该域访问资源. 那么什么叫跨域的:主机地址或者ip地址或者 ...

  7. webpack中跨域请求proxy代理(vue与react脚手架不同设置方法)

    因为浏览器有同源策略的限制,导致我们在本地开发的时候,请求不同域名的接口会存在跨域的问题 解决跨域的问题有很多方式,这里主要整理下代理模式来解决跨域的问题 代理方式能够实现的机制大体: 本地服务器 - ...

  8. VUE 使用axios请求第三方接口数据跨域问题解决

    VUE是基于node.js,所以解决跨域问题,设置一下反向代理即可. 我这里要调用的第三方接口地址为 http://v.juhe.cn/toutiao/index?type=top&key=1 ...

  9. React中跨域问题的完美解决方案

    针对react版本^16.6.0有多种解决方案 方案一:package.json中加上proxy代理配置 在packge.json加入 "proxy": "http:// ...

随机推荐

  1. Centos下添加静态路由(临时和永久有效)的操作记录

    公司IDC机房服务器上部署了一套外网LB环境,默认配置的是外网ip的路由地址,由于要和其他内网机器通信,所以需要配置内网ip的路由地址.整个操作过程,记录如下,以供以后参考学习: 1)内网网卡绑定 [ ...

  2. Python_函数_复习_习题_24

    # 函数 # 可读性强 复用性强# def 函数名(): # 函数体 #return 返回值# 所有的函数 只定义不调用就一定不执行 #先定义后调用 #函数名() #不接收返回值#返回值 = 函数名( ...

  3. 安装tesserocr错误(未解决)

    在win10下使用pip install tesserocr安装时,始终报错,未解决问题 解压tesserocr-2.2.2.tar.gz该文件夹后,查看setup.py文件,发现似乎model只能再 ...

  4. 重载(overload)、覆盖(override)、隐藏(hide)的区别

    http://blog.csdn.net/yanjun_1982/archive/2005/09/02/470405.aspx 重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同.调用的 ...

  5. Failed to execute goal org.springframework.boot

    报错 [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.4.0.RELEASE:ru ...

  6. 自定义组件的 v-model

    Vue.component('base-checkbox', { model: { prop: 'checked', event: 'change' }, props: { checked: Bool ...

  7. SQLSERVER 2014 内存优化表相关

    更新了SP2的补丁能够解决  不能收缩日志文件的bug了. 但是因为已经不用内存优化表了, 所以想着能够删除内存优化表的file group 但是发现 很难删除 先说结论: 以下是针对内存优化文件组的 ...

  8. 使用ssh config配置文件来管理ssh连接

    我本人其实及其烦使用配置文件这种东西,有时候看到巨大又复杂的配置文件,甚至复杂过代码的时候,总感觉设计配置文件的人有些本末倒置. 但是ssh这个配置文件真的非常简单好用,让我稍微体验了一次配置文件使用 ...

  9. 形象地理解Cookie和Session

    Cookie和Session的形象理解 通过实际生活中的银行卡来理解Cookie和Session间的关系: Cookie相当于银行卡 Session相当于银行账户 结合到银行存钱和取钱的过程来理解: ...

  10. 如何取消浏览器护眼色 Lodop打印图片有窗口颜色的边框

    Lodop打印图片出现了边框,然而通常情况下是没有边框的,由于Lodop是基于本机的ie进行解析的,和IE的设置有关.用户的电脑和习惯千差万别,有人喜欢给浏览器加上护眼色,而这一个行为可能导致Lodo ...