JSONP跨域的原理

article/2025/9/30 18:13:03

目录

  • JSONP跨域原理演示
  • JSONP跨域注意事项
  • JSONP实践
  • jQuery发送JSONP请求

JSONP(JSON With Padding)是利用script标签的跨域功能,比如script和img的src属性,link的href属性,它只支持get请求。

JSONP跨域原理演示

把外部资源的数据放在html中的div盒子里

<div id="result"></div>
<script>function handle(data){// 获取result元素const result=document.getElementById('result');result.innerHTML=data.name;}
</script>借助src引入外部资源
<script src="./js/app.js"></script>  
const data={name:'我是外部资源的数据'
};handle(data);

JSONP跨域注意事项

使用jsonp跨域时,服务端返回数据的不是字符串形式,返回形式是函数的调用,也就是js代码,这样浏览器才能解析并执行。其中函数参数是服务端想给客户端返回的结果数据,函数要提前在前端中声明,然后前端会执行这个函数对数据进行处理。

response.send('hello jsonp-server');
则报错

前端引用:

<div id="result"></div><script>function handle(data){// 获取result元素const result=document.getElementById('result');result.innerHTML=data.name;}</script><!-- 函数的声明要放在请求之上 -->
<script src="http://localhost:8000/jsonp-server"> 

后端通过函数调用形式返回数据:

// jsonp服务
app.all('/jsonp-server',(request,response)=>{// response.send('hello jsonp-server');   会报错,应该返回 函数调用的内容(js代码)response.send('console.log("hello jsonp-server")');  // 正常打印const data={name:'尚硅谷'};//  将数据转化为字符串let str=JSON.stringify(data);// 返回结果response.end(`handle(${str})`)    // 用end不用send 因为end不会加特殊响应头
});

JSONP实践

input框中输入用户名后,触发onblur事件时通过新增srcipt标签的方式向服务端发请求获取数据,把返回的数据信息放在p标签里
获取数据前:

返回数据后:

用户名:<input type="text" id="username"><p></p><p></p><script>// 获取input元素const input=document.querySelector('input');const p=document.querySelector('p');// 声明handle函数function handle(data){// 把input边框变成红色input.style.border="solid 1px #f00";// 修改p标签的提示文本p.innerHTML=data.msg;}// 绑定事件input.onblur=function(){// 获取用户的输入值let username=this.value;// 向服务端发送请求  检测用户名是否存在console.log(this);// 1. 创建script标签const script=document.createElement('script');// 2.设置标签的src属性script.src='http://127.0.0.1:8000/check-name-server';// 3.将script标签 插入到文档中document.body.appendChild(script);}</script>
// jsonp案例 检测用户名是否存在
app.all('/check-name-server',(request,response)=>{const data = {exist:1,msg:'用户名已经存在'};//  将数据转化为字符串let str=JSON.stringify(data);// 返回结果response.end(`handle(${str})`);  
});

jQuery发送JSONP请求

效果:点击按钮发送jsonp请求,返回的数据会展示在div盒子中。
JQuery中的$.getJSON()方法允许通过使用JSONP形式的回调函数来加载其他网域的JSON数据,jQuery会自动生成回调函数的名称。
在这里插入图片描述

<button>点击发送jsonp请求</button>
<div id="result"></div>
<script>$('button').eq(0).click(function(){                     // ?callback=? 固定写法$.getJSON('http://localhost:8000/jquery-jsonp-server?callback=?',function(data){console.log(data);$('#result').html(`名称:${data.name}</br>校区:${data.hobbies}`)})});
</script>
// jQuery发送jsonp请求
app.all('/jquery-jsonp-server',(request,response)=>{const data={name:'小明',hobbies:['吃饭','唱歌','打球']};//  将数据转化为字符串let str=JSON.stringify(data);// 接收callback参数let cb=request.query.callback;// 返回结果response.end(`${cb}(${str})`) 
});

http://chatgpt.dhexx.cn/article/ZqKMHPLK.shtml

相关文章

java~jsonp的使用

对于一个后端程序来发&#xff0c;它可能会被多个应用调用&#xff0c;而跨域的问题就来了&#xff0c;使用jsonp来解决这个问题是个不错的方式&#xff0c;下面说一下关于jsonp的知识 JSONP不是新技术&#xff0c;只是在页面上响应一段js对于响应的 MIME type (‘text/plain’…

轻松搞定JSONP跨域请求

一、同源策略 要理解跨域&#xff0c;先要了解一下“同源策略”。所谓同源是指&#xff0c;域名&#xff0c;协议&#xff0c;端口相同。所谓“同源策略“&#xff0c;简单的说就是基于安全考虑&#xff0c;当前域不能访问其他域的东西。 一些常见的是否同源示例可参照下表&a…

jsonp

jsonp 我们知道&#xff0c;普通的ajax请求存在跨域无权限访问的问题&#xff0c;这是浏览器的安全策略在起作用 index.php: <?php $info {"code" : 10,"title" : "jsonp","name" : "rgy"};echo $info; ?> test.h…

什么是JSONP及其实现原理

一、为什么会有JSONP 解决跨域问题&#xff1b;因为XMLHttpRequest有同源策略&#xff0c;而在实际开发中又常有跨域的需求&#xff0c;早期开发者为解决跨域问题&#xff0c;设计出了JSONP这个东西 二、JSONP长什么样 类似JSON&#xff0c;一种JSON的变体&#xff0c;样式就…

Ajax中的JSONP

同源策略和跨域的概念 什么是同源 如果两个页面的协议&#xff0c;域名和端口都相同&#xff0c;则两个页面具有相同的源。 什么是同源策略 同源策略(英文全称Same origin policy)是浏览器提供的一个安全功能。 MDN官方给定的概念:同源策略限制了从同一个源加载的文档或脚本如…

JSONP解决跨域问题

一、什么是同源 概念&#xff1a;如果两个页面的协议、域名和端口都相同&#xff0c;则这两个页面具有相同的源。 二、什么是同源策略 概念&#xff1a;是浏览器提供的一个安全功能。 三、什么是跨域 概念&#xff1a;同源指的是两个URL的协议、域名、端口号一致&#xff0c…

关于Jsonp,你知道多少?

# 一、Jsonp为跨域而生 为什么会出现跨域问题&#xff1f; &#x1f64b;‍♀️出于浏览器的同源策略限制。 什么是源? &#x1f64b;‍♀️源&#xff08;origin&#xff09;就是协议&#xff08;protocol&#xff09;&#xff0c;主机&#xff08;host&#xff09;和端口…

JSONP原理及实现

文章目录 基本原理执行过程优缺点 案例分析前期准备后端代码前端简单实现jQuery中ajax实现封装一个JSONP方法简易版同时多个请求最终版JSONP方法 基本原理 基本原理&#xff1a; 主要就是利用了 script 标签的src没有跨域限制来完成的。 执行过程 前端定义一个解析函数(如: …

什么是 JSONP?

前言 首先我们得先了解JSONP是怎么产生的。 最开始跨域请求数据没有现在方便&#xff0c;Ajax直接请求普通文件存在跨域无权限访问的问题&#xff0c;然后聪明的程序员想出了一套非官方的解决办法&#xff0c;程序员发现凡是带有“src”这个属性的标签都拥有跨域的能力&#x…

jsonp介绍

为什么要知道jsonp&#xff0c;jsonp的作用是什么&#xff1a; Jsonp(JSON with Padding) 是 json 的一种"使用模式"&#xff0c;可以让网页从别的域名&#xff08;网站&#xff09;获取资料&#xff0c;即跨域读取数据。原则上浏览器是不允许请求不同域名的数据的&…

前端跨域jsonp的细节,挡住面试官的连环提问

1.前言 在前端面试中&#xff0c;想必每一个人都会被问到跨域相关的问题&#xff0c;背过八股文的小伙伴肯定对跨域的解决对答如流&#xff0c;常见的跨域解决方案在网上有很多整理&#xff0c;但是如果问到实现的细节&#xff0c;你是否能够手写实现或者深入解读呢&#xff1f…

jsonp 的原理及应用

1. 什么是jsonp jsonp全称json with padding&#xff0c;填充式的json,jsonp是为跨域而生的 2. 那么有哪些标签可以跨域呢 <img src""> //图片 <link href""> //css <script src""> //程序我们可以使用script来帮助我们跨域…

JSONP详解

Jsonp(JSON with Padding) 是 json 的一种”使用模式”&#xff0c;可以让网页从别的域名&#xff08;网站&#xff09;那获取资料&#xff0c;即跨域读取数据。 为什么我们从不同的域&#xff08;网站&#xff09;访问数据需要一个特殊的技术(JSONP )呢&#xff1f;这是因为同…

使用JSONP解决跨域

1.首先需要知道什么是跨域 浏览器从一个域名的网页去请求另一个域名的资源时&#xff0c;域名、端口、协议任一不同&#xff0c;都是跨域 出于浏览器的同源策略限制 同源策略&#xff08;Sameoriginpolicy&#xff09;是一种约定&#xff0c;它是浏览器最核心也最基本的安全功…

虚拟机安装ubuntu全教程

主要流程 - 准备安装包&#xff08;包括ubuntu镜像、虚拟机压缩包、分区助手)安装虚拟机安装ubuntu、安装vmtool&#xff08;解决ubuntu全屏的问题&#xff09; 一、准备安装包 下载地址&#xff1a;http://pan.baidu.com/s/1hr39WGG 密码&#xff1a;tttq 二、安装虚拟机 …

ubuntu服务器ubuntu Server安装教程

记录一次系统安装到拷贝大数据文件的过程。 说在前: 1.系统U盘启动安装软件Rufus&#xff0c;自行百度下载2.下载Ubuntu Server镜像&#xff0c;官方地址即可一、安装 1、选择Ubuntu Server 2、语言选择&#xff0c;默认英语 3、有网络的话选择第一项升级系统&#xff0c;…

ubuntu安装图文教程

作为目前世界上最安全的操作系统&#xff0c;Linux逐渐被大多数人使用&#xff0c;而ubuntu作为Linux分支中最华丽美观的操作系统&#xff0c;有必要有一个好多安装教程 ubuntu系统是一个linux操作系统;ubuntu安装教程的每个版本类似&#xff0c;下面给您带来的是12.04版本的ub…

Ubuntu/Windows 双系统安装教程

前言 由于工作所用的开发环境是linux的&#xff0c;所以决定把自己电脑装一个windows/ubuntu双系统。Ubuntu不同版本的物理机安装流程都是一样的&#xff0c;而且极其简单&#xff0c;不要怕自己没装过把电脑整坏了&#xff0c;大不了连windows一起给它重装了。 双系统安装步…

安装Ubuntu系统详细教程

一. 前言 本篇文章详解介绍一下如何安装Ubuntu系统&#xff0c;笔者在安装的过程中踩过很多坑&#xff0c;重装了很多次&#xff0c;现在把安装过程中遇到的问题也列出来&#xff0c;供大家参考。 二. 准备工作 这个环节很重要&#xff0c;工欲善其事&#xff0c;必先利其器。 …

VMware虚拟机安装Ubuntu(超详细图文教程)

VMware虚拟机安装Ubuntu 1 Ubuntu下载2 打开VMware3 然后就可启动虚拟机4 等待吧5 重启后就完了&#xff0c; 到这就基本结束了6 下面可以调一下软件下载源 1 Ubuntu下载 Ubuntu下载地址&#xff1a;点这里 注&#xff1a;但官网下载比较慢 也可关注公众号Time木回复&#xf…