jsonp跨域请求详解

那么让我们来详细讲解一下“jsonp跨域请求详解”的完整攻略。

什么是jsonp?

JSONP(JSON with padding)是 JSON 的一种“使用模式”,可以让网页从别的域名(网站)那获取资料,即跨域请求数据,是一种非正式传输协议。

JSONP通过动态插入script标签的方式实现跨域请求,因为从不同域名下请求js文件是被允许的。JSONP传输的是JSON字符串,所以只支持get请求。而且由于是通过script标签请求的,所以服务器端返回的必须是一段有效的JavaScript代码,JSONP才能正确执行。

JSONP请求示例

比如我们要从其他网站获取一段JSON文本数据,则需要使用jsonp方式请求:

<script>
  function handleData(data){
    console.log(data)
  }
  var script = document.createElement('script');
  script.src = 'http://example.com/data.json?callback=handleData';
  document.head.appendChild(script);
</script>

这里我们创建一个handleData()函数来处理返回的数据,并且在script标签中指定了请求的url以及查询参数?callback=handleData。这里的handleData就是作为回调函数名传递到后台,后台处理完成后就会调用这个函数并传递数据。

后端代码示例:

<?php
$jsonData = '{
    "name": "张三",
    "age": 18
}';
$callback = $_GET['callback'];
echo $callback . '(' . $jsonData . ')';
?>

这里我们在php脚本中先定义了需要返回的JSON格式的数据$jsonData,然后通过$callback = $_GET['callback'];获取前端传递过来的回调函数名,并将数据通过echo $callback . '(' . $jsonData . ')'; 的形式输出到前端。此时前端页面中的handleData()函数就会被调用,传递JSON数据作为参数:handleData({"name": "张三", "age": 18})

JSONP封装函数示例

通常我们为了方便复用,会封装一个JSONP请求的函数:

function jsonp(url,success){
  //1.创建一个随机的函数名,避免被缓存
  var fnName = 'json_' + Math.random().toString().substr(2); 
  //组装查询字符串添加回调函数名称
  var script = document.createElement('script');
    script.src = url + '?callback=' + fnName;
    //定义一个异步的callback函数
    window[fnName] = function(data){
    success&&success(data);
  };
   //请求返回后删除插入的script标签,并将回调函数删除
    script.onload = function () {
      this.remove();
      delete window[fnName];
    };
  document.body.appendChild(script);
}

这里我们定义一个jsonp()函数,它接收两个参数:请求的url和回调函数success。然后我们通过创建一个随机的函数名称,将函数添加到window对象的属性中,然后通过查询字符串将这个函数名称传递给后台。后台返回的数据就会自动调用函数,我们通过success()函数来处理返回数据。

这个jsonp()函数的返回结果就是调用success函数时所传入的data参数。

例如我们要请求服务器的数据:

jsonp("https://api.github.com/search/repositories?q=javascript",function(data){
  console.log(data);
})

这里的https://api.github.com/search/repositories?q=javascript是一个Github API接口,通过查询字符串传递需要搜索的关键词q=javascript,返回的是一段JSON格式的数据。我们在success函数中对这个数据进行处理。

这就是JSONP跨域请求的完整攻略,希望可以帮助你更好的理解和应用JSONP。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsonp跨域请求详解 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript手机振动API

    JavaScript手机振动API可以在移动设备上实现震动控制,让手机产生震动效果。本攻略将详细介绍如何使用JavaScript实现手机振动。 导入API 要使用JavaScript的手机振动API,需要使用Vibration API,该API基于Promise对象,包含两个方法:vibrate()和cancelVibration()。 要使用Vibrati…

    JavaScript 2023年6月11日
    00
  • JS实现json数组排序操作实例分析

    下面是JS实现json数组排序操作的完整攻略: 什么是JSON数组排序? JSON数组排序是指对一个JSON数组中的元素按照指定的规则进行排序的过程。 如何实现JSON数组排序? 下面是一些实现JSON数组排序的常用方法: 使用Array.sort()方法排序 首先,我们通过Array.sort()方法实现数组排序。Array.sort()方法可以接收一个可…

    JavaScript 2023年5月27日
    00
  • JavaScript立即执行函数用法解析

    JavaScript中的立即执行函数是指在定义后立即执行的函数。它的语法是使用函数表达式或函数声明的方式定义一个函数,然后紧接着使用括号将其包起来,并在后面添加括号,如下: // 函数表达式方式 (function() { // 立即执行的代码 })(); // 函数声明方式 (function foo() { // 立即执行的代码 })(); 这种立即执行…

    JavaScript 2023年5月27日
    00
  • js操作数组函数实例小结

    让我来详细讲解一下“js操作数组函数实例小结”的攻略。 一、前言 JavaScript中的数组非常强大,可以通过使用一系列内置函数来实现对数组的操作,例如增删改查、排序等等。这些函数能给程序员带来很大的便利,让我们的编码效率成倍提升。 二、常用操作函数 下面是一些常用的操作数组的函数: 1. push和pop push和pop用于在数组的末尾添加或删除数据。…

    JavaScript 2023年5月27日
    00
  • JS简单获取客户端IP地址的方法【调用搜狐接口】

    JS简单获取客户端IP地址的方法【调用搜狐接口】 获取客户端IP地址是一种常见的需求,而JavaScript作为Web开发的主流语言,有时候需要通过JS获取客户端的IP地址。下面介绍一种简单的方式:调用搜狐接口。 1. 搜狐IP地址接口 搜狐提供了一个IP地址查询接口,可以通过该接口获取到访问者的IP地址和地理位置信息。接口地址为:http://pv.soh…

    JavaScript 2023年6月10日
    00
  • JavaScript 笔记

    JavaScript 简介 JavsScript 于 1995 年由 Brendan Eich 用时 10 天写出,用于网景浏览器。最初的名字叫 LiveScript,也被部分员工称为 Mocha。那时 Java 语言很流行,出于商业化的考量,更名为 JavaScript,但两者之间没有关联。 最早的 JS 作为脚本语言给浏览器增加一些诸如鼠标跟随等交互性特…

    JavaScript 2023年5月7日
    00
  • JS document文档的简单操作完整示例

    JS document 文档是操作网页元素的核心接口。它可以通过 js 代码来获取、修改和新增 HTML 元素,以实现网页动态变化。接下来将通过两个示例介绍基本的 JS document 操作。 示例1:获取元素 在 HTML 文档中,标签是最基本的元素,通过 JS document 可以获取 HTML 中指定标签的元素。获取标签元素需要使用 getElem…

    JavaScript 2023年6月10日
    00
  • js数组方法reduce经典用法代码分享

    当需要将一个数组中的所有元素进行计算并且结果为一个值时,可以使用 JavaScript 数组方法 reduce()。 reduce() 方法对数组中的每个元素依次执行提供的函数,前一个执行结果作为下一个执行的参数,直到数组被处理完并且返回一个计算结果。 下面是 reduce() 方法的语法: array.reduce(function(total, curr…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部