封装 jsonp请求数据的方法

什么是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);
          }
        })
      }

原文地址:https://www.cnblogs.com/littleSpill/p/11520246.html

时间: 2024-10-12 09:32:59

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

BeanUtils--02--- 创建工具类 封装request 请求数据到实体类中

1. 前台传过来的数据都是字符串, 基本类型BeanUtils会自动转换, 日期类型需要注册转换器,自带的DateLocalConvert转换器未实现空字符串""的判断 public static <T> T copy2Bean(HttpServletRequest request, Class<T> clazz) { ConvertUtils.register(new Converter() {//注册日期转换器 public Object convert(C

struts2封装客户端请求数据(3种封装方式)

长话短说,直接进入主题. 1.属性驱动 action的属性名称必须和jsp输入项的name属性保持一致: 必须要在action类中提供该属性的set方法,但有时候会出错,为了保险起见,我们把get/set方法都写上: package com.tbamaw.web.action; import com.opensymphony.xwork2.ActionSupport; public class User2Action extends ActionSupport{ private static f

iOS 封装AFNetworking请求数据

#import "AFNetworking.h" + (void)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(id))success failure:(void (^)(NSError *))failure { // 创建请求管理者 AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; [m

springMVC接受请求数据的方法

方法一:访问方法是/one?id=666 @RequestMapping(value="/one",method=RequestMethod.GET) public String hello(@RequestParam("id")int id,Model model){ model.addAttribute("id",id); return "hello"; } 方法二:访问方法:/two/666 @RequestMappin

jquery中使用jsonp请求数据

//jquery部分的代码 1 $.ajax({ 2 type:'GET', 3 url:"http://192.168.0.224/jsonp.php", 4 data:"", 5 dataType:'jsonp', 6 jsonp: 'callback', 7 timeout: 2000, 8 success:function(res){ 9 alert(res.info); 10 } 11 }); //php部分的代码 1 <?php 2 header(

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

1.在spring-mvc的配置文件中已经配置jsp的视图解析器 2.在Controller中使用Model的addAttribute方法添加属性name,msg 3.在jsp页面中使用${msg}取msg属性的值失败 4.失败输出 5.解决方法 在需要解析Model或者ModelAndView的jsp页面中添加:<%@ page isELIgnored="false" %> 6.成功输出 原文地址:https://www.cnblogs.com/jidanke/p/106

豆瓣 jsonp 请求数据 并分页

豆瓣分页 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 2 "http://www.w3.org/TR/html4/strict.dtd"> 3 4 <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> 5 <head> 6 <meta http-equiv="Co

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

由于js同源策略的影响,当在某一域名下请求其他域名,或者同一域名,不同端口下的url时,就会变成不被允许的跨域请求.那这个时候通常怎么解决呢,对此菜鸟光头我稍作了整理:1.JavaScript   在原生js(没有jQuery和ajax支持)的情况下,通常客户端代码是这样的(我假设是在localhost:8080的端口下的http://localhost:8080/webs/i.mediapower.mobi/wutao/index.html页面的body标签下面加入以下代码): <script

原生与jQuery封装的ajax请求数据及状态码

原生Ajax 请求数据 btn.addEventListener('click',function(){ if(window.XMLHttpRequest){ var xhr = new window.XMLHttpRequest(); }else{ //兼容IE浏览器 var xhr = new ActiveXObject('Microsoft.XMLHTTP'); } //请求方式get/post //请求URL //ture 异步请求:false 同步请求 xhr.open('get','