什么是jsonp : 

Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

为什么我们从不同的域(网站)访问数据需要一个特殊的技术( JSONP )呢?这是因为同源策略。

同源策略,它是由 Netscape 提出的一个著名的安全策略,现在所有支持 JavaScript 的浏览器都会使用这个策略。

了解一下jsonp的api : 

封装jsonp的方法:

//jsonp.js文件

import originJsonp from 'jsonp'       //首先引入jsonp

//第一个参数url为接口地址。
// 第二个参数data为接口地址后面携带的参数。因为jsonp不支持直接传一个对象。所以,我们可以把url和需要传的参数分开。这样我们调用这个方法的时候会更加方便。
// 第三个参数opts为对应api上面的opts
export default function jsonp(url, data, opts) {
//拼接url和需要传递的参数data。
//先判断url后面有没有?号,没有的话后面加?,有的话后面加&
url += (url.indexOf("?") < 0 ? "?" : "&") + param(data); //jsonp的函数我们需要返回一个promise
return new Promise((resolve, reject) => {
originJsonp(url, opts, (err, data) => {
if (!err) {
resolve(data)
} else {
reject(err)
}
})
})
}

//封装一个方法,把对象拆解出来拼接到url的后面
export function param(data) {
let url = "";
for (var k in data) {
//如果data[k]为undefined的话,就返回空
let value = data[k] !== undefined ? data[k] : "";
//我们使用 encodeURIComponent() 对 URI 进行一下编码
url += `&${k}=${encodeURIComponent(value)}`;
}
//如果url不为空的话需要删去第一个&。
return url ? url.substring(1) : "";
}

使用方法:

//引入刚刚封装的jsonp方法
import jsonp from './jsonp.js' getData() {
const url = "http://xxxxxxxx";
const data = {
name: 'zhangsan',
age: 12
};
const opts = {
param: 'jsonpCallback'
};
jsonp(url, data, opts).then(res => {
if (res.code === 0) {
console.log(res.data);
}
})
}

封装 jsonp请求数据的方法的更多相关文章

  1. 基于AFNetWorking 3.0封装网络请求数据的类

    对于使用 AFNetworking 的朋友来说,很多朋友都是直接调用 AFNetworking的 API ,这样不太好,无法做到全工程统一配置. 最好的方式就是对网络层再封装一层,全工程不允许直接使用 ...

  2. vue 使用 jsonp 请求数据

    vue 使用 jsonp 请求数据 vue请求数据的时候,会遇到跨域问题,服务器为了保证信息的安全,对跨域请求进行拦截,因此,为了解决vue跨域请求问题,需要使用jsonp. 安装jsonp npm ...

  3. 自定义jsonp请求数据

    整理代码的时候发现一个以前写的实现jsonp请求方法,放在这里分享一下~ 原理:通过js新建script dom对象,利用src携带参数和callback方法,将数据发送至后端,需要后端配合将数据放在 ...

  4. 从API请求数据的方法(主要适用于tp5)

    // 从api获取数据,$data是一个数组,默认为空,请求数据的方法可以通用,但是其它说明只适用于tp5 function postData($url,$data=''){ $ch = curl_i ...

  5. EL表达式无法获取Spring MVC的Model封装好的数据解决方法

    1.在spring-mvc的配置文件中已经配置jsp的视图解析器 2.在Controller中使用Model的addAttribute方法添加属性name,msg 3.在jsp页面中使用${msg}取 ...

  6. 关于ajax请求数据的方法

    $.ajax({  //课程详情信息    type:'get',     data: {'id':courseId},    dataType:'json',        beforeSend : ...

  7. 豆瓣 jsonp 请求数据 并分页

    豆瓣分页 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4 ...

  8. js跨域请求数据的3种常用的方法

    由于js同源策略的影响,当在某一域名下请求其他域名,或者同一域名,不同端口下的url时,就会变成不被允许的跨域请求.那这个时候通常怎么解决呢,对此菜鸟光头我稍作了整理:1.JavaScript   在 ...

  9. angular开发中对请求数据层的封装

    代码地址如下:http://www.demodashi.com/demo/11481.html 一.本章节仅仅是对angular4项目开发中数据请求封装到model中 仅仅是在项目angular4项目 ...

随机推荐

  1. 算法与数据结构基础 - 拓扑排序(Topological Sort)

    拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序 ...

  2. 史上最全面 Android逆向培训之__实战(hook微信)

    我的CSDN博客:https://blog.csdn.net/gfg156196   by--qihao 书接上文,上回说到了xposed,接下来就用一下,体验一下商业项目的赶脚…… 上一篇:史上最全 ...

  3. 从零写一个编译器(九):语义分析之构造抽象语法树(AST)

    项目的完整代码在 C2j-Compiler 前言 在上一篇完成了符号表的构建,下一步就是输出抽象语法树(Abstract Syntax Tree,AST) 抽象语法树(abstract syntax ...

  4. 【RabbitMQ】如何进行消息可靠投递【上篇】

    说明 前几天,突然发生线上报警,钉钉连发了好几条消息,一看是RabbitMQ相关的消息,心头一紧,难道翻车了? [橙色报警] 应用[xxx]在[08-15 16:36:04]发生[错误日志异常],al ...

  5. Kubernetes 再深入一点点

    kb master 运行如下容器 etcd 是 k8s 的核心, 主要负责k8s的核心数据处理及保存, 需要备份该数据,或者做集群 ,服务端口 2379(客户端服务) 2380(节点通信)kube-c ...

  6. vue 实现数据绑定原理

      案例: Vue 底层原理   // 目的: 使用原生js来实现Vue深入响应式   var box = document.querySelector('.box')   var button = ...

  7. Java函数式编程原理以及应用

    一. 函数式编程 Java8所有的新特性基本基于函数式编程的思想,函数式编程的带来,给Java注入了新鲜的活力. 下面来近距离观察一下函数式编程的几个特点: 函数可以作为变量.参数.返回值和数据类型. ...

  8. 版本管理·玩转git(快速入门git)

    如果你用过Word文档写过文章,那么你一定会有这样的经历. 我觉得某一段或者某一句写得不够好,但是,删掉之后我可能会后悔把它删掉了,进而又想把删掉的段落找回来,这时,你想到了一个好办法,将每次的修改都 ...

  9. 高并发下,调整IIS相关的设置,以提高服务器并发量

    1.修改 IIS 队列长度 参考资料:https://docs.microsoft.com/zh-cn/previous-versions/office/communications-server/d ...

  10. cython 第一次接触

    https://www.cnblogs.com/kaituorensheng/p/4452881.html