import originJSONP from 'jsonp' // 引入 jsonp 模块

// 对外暴露方法 jsonp
// 通常传给服务端的 url 地址带参数 设计目的是希望有纯净的 url 参数通过 data 拼在 url 上面
export default function jsonp(url, data, option) {
// url 没有 '?' 时需要加 '?'
url += (url.indexOf('?') < 0 ? '?' : '&') + param(data) // 返回 promise
return new Promise((resolve, reject) => {
// 调用引入的 jsonp 模块 originJSONP
originJSONP(url, option, (err, data) => {
// err 如果不是 null 表示成功的
if (!err) {
resolve(data)
} else {
reject(err)
}
})
})
} // data 是一个对象 封装 data 使它遍历后放入 url 中
function param(data) {
let url = ''
// 通常 data 是一级的对象
for (var k in data) {
// 有时候 data 的值为 undefined
// 所以不能直接加在 url 上面 设置 data 的值为 undefined 时设置为空
let value = data[k] !== undefined ? data[k] : ''
// ES6 语法
url += `&${k}=${encodeURIComponent(value)}`
}
// 如果 url 有 data 需要把第一个 & 删除 如果没有返回空
return url ? url.substring(1) : ''
}
import originJSONP from 'jsonp' // 引入 jsonp 模块
// 对外暴露方法 jsonp
// 通常传给服务端的 url 地址带参数 设计目的是希望有纯净的 url 参数通过 data 拼在 url 上面
export default function jsonp(url, data, option) {
// url 没有 '?' 时需要加 '?'
url += (url.indexOf('?') < ? '?' : '&') + param(data)
// 返回 promise
return new Promise((resolve, reject) => {
// 调用引入的 jsonp 模块 originJSONP
originJSONP(url, option, (err, data) => {
// err 如果不是 null 表示成功的
if (!err) {
resolve(data)
} else {
reject(err)
}
})
})
}
// data 是一个对象 封装 data 使它遍历后放入 url 中
function param(data) {
let url = ''
// 通常 data 是一级的对象
for (var k in data) {
// 有时候 data 的值为 undefined
// 所以不能直接加在 url 上面 设置 data 的值为 undefined 时设置为空
let value = data[k] !== undefined ? data[k] : ''
// ES6 语法
url += `&${k}=${encodeURIComponent(value)}`
}
// 如果 url 有 data 需要把第一个 & 删除 如果没有返回空
return url ? url.substring() : ''
}

jsonp 简单封装的更多相关文章

  1. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

    前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...

  2. FMDB简单封装和使用

    工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...

  3. Android--Retrofit+RxJava的简单封装(三)

    1,继续接着上一篇的讲讲,话说如果像上一篇这样的话,那么我们每一次请求一个结构都要创建一堆的Retrofit对象,而且代码都是相同的,我们可以试试封装一下 先创建一个HttpMethods类,将Ret ...

  4. okhttp3 get post 简单封装

    最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post 因为 CallBack 也是在子线程中执行,所以用到了 Handler public class MyOkHttpCli ...

  5. python网页请求urllib2模块简单封装代码

    这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...

  6. 对pymysql的简单封装

    #coding=utf-8 #!/usr/bin/python import pymysql class MYSQL: """ 对pymysql的简单封装 "& ...

  7. iOS开发——UI篇OC篇&UITableView简单封装

    UITableView简单封装 UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也 ...

  8. iOS sqlite 增删改查 简单封装(基于 FMDB)

    /** *  对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 * *  基于 FMDB * *  操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整 ...

  9. ADO简单封装(MFC)

    简单封装了一下,不是很严谨. /************************************************************************/ /* INSTRUC ...

随机推荐

  1. Python序列化操作与反序列操作

    一.概念 序列化:转向一个字符串数据类型序列:字符串 二.需要做序列化操作的情况1.数据存储2.网络上数据传输 从数据类型到字符串的过程叫序列化从字符串到数据类型的过程叫反序列化 三.现有序列化模块1 ...

  2. Eclipse在开发JavaEE时怎么显示隐藏的WebContent和build文件夹

    在使用eclipse是WebContent和build文件被隐藏起来时解决方法: 1.选择eclipse中的下三角选择Select Working Set: 2.将Java Main Sources选 ...

  3. 有关Linux ipv6模块加载失败的问题

    有关Linux ipv6模块加载失败的问题 同事一个SUSE11sp3环境配置ipv6地址失败,提示不支持IPv6,请求帮助,第一反应是应该ipv6相关内核模块没有加载.     主要检查内容:   ...

  4. k8s重启策略

    Pod 的重启策略有 3 种,默认值为 Always. Always : 容器失效时,kubelet 自动重启该容器: OnFailure : 容器终止运行且退出码不为0时重启: Never : 不论 ...

  5. [TestNG] [WARN] Ignoring duplicate listener : org.testng.IDEATestNGRemoteListenerEx

    1. 使用6.10,和6.14.3版本testng,出现多条warn信息 [TestNG] [WARN] Ignoring duplicate listener : org.testng.IDEATe ...

  6. 企业BGP网络规划案例(三)

    路由选路 1.分支的办公流和生产流默认走联通MSTP线路,DC流默认走电信MSTP线路,当其中某条互联的链路down后才会进行流量切换 XRV1配置 ========================= ...

  7. H-Modify Minieye杯第十五届华中科技大学程序设计邀请赛现场赛

    题面见 https://ac.nowcoder.com/acm/contest/700#question 题目大意是有n个单词,有k条替换规则(单向替换),每个单词会有一个元音度(单词里元音的个数)和 ...

  8. 转)Ubuntu安装teamviewer

    以下内容提炼于:https://www.cnblogs.com/wmr95/p/7574615.html 官网下载相应包:https://www.teamviewer.com/zhcn/downloa ...

  9. Android 8.0+ 更新安装apk失败的问题

    最近做项目发现Android 8.0+ 更新安装apk时 出现安装失败的情况  总结原因是 缺少安装的权限 Android 8.0 (Android O)为了针对一些流氓软件引导用户安装其他无关应用. ...

  10. python 打开浏览器的方法 Python打开默认浏览器

    一.python 打开浏览器的方法: . startfile方法(打开指定浏览器) import os os.startfile("C:\Program Files\internet exp ...