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

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

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

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

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

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

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

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

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

页面展示:

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

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

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

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

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

  componentWillMount(){
this.setState({
userName:'jser'
})
setInterval(()=>{
let sysTime=Util.formateDate(new Date().getTime())
this.setState({
sysTime
})
},1000)
}
<span className="date">{this.state.sysTime}</span>

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

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

通过yarn add jsonp --save

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

import JsonP from 'jsonp'
export default class Axios{
static jsonp(options){
return new Promise((resolve,reject)=>{
JsonP(options.url,{
param:'callback'
},function(err,response){
if(response.status=='success'){
resolve(response)
console.log(response)
}else{
reject(response.message)
}
})
})
}
}

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

  getWeatherAPIData(){
let city="深圳"
axios.jsonp({
url:'http://api.map.baidu.com/telematics/v3/weather?location='+encodeURIComponent(city)+'&output=json&ak='神奇
}).then((res)=>{
//项目公共机制
console.log(res)
if(res.status=='success'){
let data=res.results[0].weather_data[0];
this.setState({
dayPictureUrl:data.dayPictureUrl,
weather:data.weather
})
}
})
}

接着让数据展示即可

<img src={this.state.dayPictureUrl} alt=""/>
</span>
<span className="weather-detail">
{this.state.weather}
</span>

最新文章

  1. Servlet3.0的可插拔功能
  2. visual studio R6034解决方案集 从VC6.0 或VC2003 到VC2005发现的问题
  3. ssh-keygen的用法
  4. 假设有两个包含整数的vector对象,编写一段程序,检验其中一个vector对象是否是另一个的前缀。
  5. Sharepoint的网页(Page),网页解析(Parsing)与解析安全处理(Security)
  6. WPF 截屏软件开发
  7. 原声js 五子棋 源码
  8. CubieBoard开发板数据源介绍
  9. jQuery开发自定义插件 $.extend()与$.fn.extend()
  10. Failed to get D-Bus connection: Operation not permitted解决
  11. 17_Python装饰器
  12. IDEA安装和JDK的配置
  13. sql语句中的不等于 &lt;&gt;
  14. NYOJ-1058 DFS部分求和
  15. Redis源代码剖析--对象object
  16. Centos7搭建pptp一键安装脚本
  17. HDUOJ----4504 威威猫系列故事——篮球梦
  18. 有人问thinkphp的标签解析的时候为什么出现标签内内容空格丢失
  19. poj 2723 Get Luffy Out 2-SAT
  20. PID控制算法的C语言实现十&#160;专家PID与模糊PID的C语言实现

热门文章

  1. Linux运维笔记-日常操作命令总结(3)
  2. final个人阅读作业
  3. C++编写四则运算生成程序
  4. Linux内核分析— —进程的切换和系统的一般执行过程
  5. 趟坑:使用pip安装TensorFlow
  6. I/O(输入/输出)
  7. Git的其他用法
  8. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 5. 参数
  9. PostgreSQL字段类型说明
  10. jquery Ajax get()/post()