jsonp跨域获取百度联想词的方法分析

这里是“jsonp跨域获取百度联想词的方法分析”的完整攻略。

什么是jsonp跨域?

因为同源策略的限制,浏览器不能直接访问非同源的资源。但是某些情况下我们需要跨域请求数据。jsonp跨域是一种能够解决这个问题的方法。

jsonp跨域的原理是利用script标签不受同源策略的限制的特性,以动态创建script标签来访问非同源数据。网站请求一个跨域的JS或JSONP资源,将要请求的回调函数名字写到url的查询字符串中,非同源的服务器返回一个JavaScript脚本或JSONP,并且在响应头中设置回调函数名为预期的函数名称。然后浏览器会把这个脚本或JSONP载入到DOM中,此时执行载入的脚本会直接调用请求url中指定的回调函数,然后将服务器返回的数据作为参数传递给回调函数。

JSONP基于script标签,因此必须是get请求。

如何使用JSONP获取百度联想词?

以获取百度搜索联想词为例:

var input = document.getElementById("input");
input.addEventListener("input", function() {
    var value = input.value.trim();
    if (value === "") {
        return;
    }
    var script = document.createElement("script");
    script.src = "https://www.baidu.com/su?wd=" + encodeURIComponent(value) + "&cb=callback";
    document.head.appendChild(script);
});
function callback(response) {
    console.log(response.s);
}

上述代码中,我们首先获取输入框中的文本,然后根据这个文本创建一个script标签,添加到页面head里。我们把想要查询的值作为url的查询字符串传递给远程服务器,并在url中指定回调函数的名字为“callback”。服务器返回JSONP,其中包含了“callback(response)”这个回调函数,浏览器把这个函数载入到DOM中并执行。这样就可以通过回调函数获取到联想词了。

接下来我们再看一个例子。

比如这里有一个不支持CORS的Api地址:https://api.apiopen.top/getJoke?page=1&count=2&type=video。

我们可以通过JSONP获取到这个Api的数据:

function getJoke(response) {
    console.log(response.result);
}
var script = document.createElement("script");
script.src = "https://api.apiopen.top/getJoke?page=1&count=2&type=video&callback=getJoke";
document.head.appendChild(script);

这段代码中,我们同样动态创建script标签,并指定url包含了想要获取的Api地址和回调函数名称。注意:这里的回调函数名称必须和前端定义的函数名称一致。需要注意的是,当访问的Api返回的不是JSONP格式的数据时,依然会遵循同源策略,jsonp无法有效获取需要的数据。

以上是JSONP跨域获取百度联想词的方法分析,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsonp跨域获取百度联想词的方法分析 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 如何在Java程序中访问mysql数据库中的数据并进行简单的操作

    让我们来讲解如何在Java程序中访问MySQL数据库中的数据并进行简单的操作。 步骤一:下载并安装MySQL连接器 在开始编写Java程序之前,需要下载并安装MySQL的JDBC驱动程序。可以在MySQL官方网站下载最新版本的MySQL连接器。下载完成后,将.jar文件添加到Java项目的类路径中。 步骤二:创建数据库连接 在Java程序中连接MySQL数据…

    Java 2023年5月19日
    00
  • java编程之AC自动机工作原理与实现代码

    Java编程之AC自动机工作原理与实现代码 简介 AC自动机(Aho–Corasick automaton)是一种高效的多模式匹配算法。它能够同时对多个模式串进行匹配,并且时间复杂度是线性级别的。在字符串匹配、敏感词过滤、关键字过滤等领域广泛应用。本文将详细讲解AC自动机的工作原理以及在Java中实现AC自动机的代码。 工作原理 AC自动机的本质是构建了一个…

    Java 2023年5月18日
    00
  • 图解Java经典算法冒泡排序的原理与实现

    下面详细讲解一下“图解Java经典算法冒泡排序的原理与实现”的完整攻略。 冒泡排序的原理 冒泡排序是一种基础的排序算法,它是通过比较相邻元素的大小来进行排序的。具体来说,它的原理是: 比较相邻的两个元素,如果前面的元素大于后面的元素,就交换它们的位置。 对每一对相邻元素做相同的操作,从开始的第一对直到结尾的最后一对。这样一轮下来,就能把最大元素排到最后。 对…

    Java 2023年5月19日
    00
  • springboot+jersey+tomcat实现跨域方式上传文件到服务器的方式

    下面是 “springboot+jersey+tomcat实现跨域方式上传文件到服务器的方式” 的攻略: 简介 跨域问题是Web开发中常遇到的问题。在前后端分离的情况下,常常需要从前端页面中上传文件到服务器。本文将介绍如何在使用SpringBoot + Jersey框架的项目中实现跨域方式上传文件到服务器的方式。 第一步:在pom.xml中添加依赖 首先,在…

    Java 2023年5月19日
    00
  • CAS操作的作用是什么?

    CAS (Compare-and-Swap) 操作是计算机系统中的一种并发原语,可以用来实现多线程同步,防止多线程同时修改同一个共享变量而导致数据不一致的问题。 CAS 操作主要使用于多线程环境下对共享变量的原子操作,可以保证多线程并发读写时的安全性。 该操作一般由三个参数组成:共享内存变量 V、预期值 A 和新值 B。操作的目的是:如果当前 V 的值等于 …

    Java 2023年5月10日
    00
  • spring boot中的properties参数配置详解

    让我来详细讲解“spring boot中的properties参数配置详解”的攻略。 什么是Properties文件? 在Spring Boot中,我们可以使用properties文件来配置应用程序的属性和参数。Properties文件通常存储在src/main/resources目录下,它可以是单个文件,也可以是多个文件,每个文件都以.properties…

    Java 2023年5月19日
    00
  • Java设计模式之java迭代器模式详解

    Java设计模式之Java迭代器模式详解 迭代器模式(Iterator Pattern)是很多程序员最常用的一种设计模式,它主要用来遍历集合(Collection)中的元素,让我们能够在不暴露集合底层实现的情况下,按照一定顺序访问集合中的元素。本文将详细讲解Java迭代器模式在设计中的应用,以及如何实现Java迭代器模式。 迭代器模式简介 迭代器模式是一种行…

    Java 2023年5月23日
    00
  • Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例

    Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例,主要是针对未知维度的集合进行求解笛卡尔积问题,该问题常见于数学和计算机科学中。通过Java的两种方式实现,即可解决此类问题。 一、递归方式实现笛卡尔积算法示例 针对未知维度的集合进行求解笛卡尔积问题,可以使用递归方式进行实现。实现过程中,需要先求出第一个集合的元素,然后依次将后面的集合元素加入…

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