跨域之JSONP

深入解析STM32H743双精度FPU:从配置误区到三角函数加速技巧 本文深入解析STM32H743双精度FPU的配置与优化技巧,涵盖常见误区、三角函数加速及飞控系统应用。通过实测数据展示如何利用FPU提升数学运算效率,特别适合工业控制、无人机飞控等高精度实时应用场景。 阅读详情

什么是jsonp

Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。为什么我们从其它网站获取数据需要通过jsonp技术来获取呢?那是因为同源策略。

什么是同源策略

同源策略,它是由 Netscape 提出的一个著名的安全策略,现在所有支持 JavaScript 的浏览器都会使用这个策略。同源策略是浏览器的行为,是为了保护本地数据不被JavaScript代码获取回来的数据污染,因此拦截的是客户端发出的请求回来的数据接收,即请求发送了,服务器响应了,但是无法被浏览器接收。
所谓同源,即域名,协议,端口相同。
所谓跨域,即不同域,ajax不允许跨域。

例如:

http://www.baidu.com和https://www.baidu.com  
http://www.baid.com和http://www.baidu.com:8080

jsonp的原理

整体来说,jsonp实现跨域的原理是跨域的服务端把客户端所需要的数据放进客户端本地的一个js方法里,进行调用,客户端在本地的js对返回的数据进行处理。这样就实现了不同域名下的两个站点间的交流。

由于<script>标签的src可以跨域,利用这一点,就有了jsonp这种非正式传输协议。因为有可能是多个不同站点都要访问这个服务端,那么各个站点要调用的方法可能是各不相同的,如果把方法名写死的话,就会很不和谐。所以解决的办法是各个站点来访问服务端时,在url中带一个参数(callback(cb))(根据情况)过来,服务端获取到这个参数,就会在生成js代码时,以这个callback参数作为方法名,再把数据放到这个方法里。这样各个站点就可以调用各自的方法了。这也是jsonp的一个要点。

jsonp的实现方式

下面举一个例子来验证ajax不支持跨域及跨域解决。

通过点击页面发起ajax请求,请求成功后,将后台的数据显示。

首先通过<script>标签引入封装好的ajax文件。

封装的ajax如下:

function ajax(options){
    // 1.处理默认参数
    var {type,url,success,error,data,timeout} = options;
    type = type || "get";
    data = data || {};
    timeout = timeout || 2000;

    // 2.解析要发送的数据
    var str = "";
    for(var i in data){
        str += `${i}=${data[i]}&`;
    }

    // 3.根据方式,决定是否处理url
    if(type == "get"){
        var d = new Date();
        url = url + "?" + str + "__qft=" + d.getTime();
    }

    // 4.开启ajax
    var xhr = new XMLHttpRequest();
    // 注意:open中的方式
    xhr.open(type,url,true);
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status == 200){
            // 5.执行成功之前,先判断是否传入
            success && success(xhr.responseText);
            // 成功之后,不应有失败
            error = null;
        }else if(xhr.readyState == 4 && xhr.status != 200){
            // 6.执行失败之前,先判断是否传入
            error && error(xhr.status);
            // 失败之后,不应有成功
            success = null;
            // 且失败不应多次执行
            error = null;
        }
    };

    // 7.如果请求超时,执行失败
    setTimeout(() => {
        error && error("timeout");
        // 失败之后,不应有成功
        success = null;
    }, timeout);

    // 8.最后根据type的方式,决定send的发送内容和格式
    if(type == "post"){
        xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xhr.send(str)
    }else{
        xhr.send()
    }
}

接下来是PHP代码:

<?php
    $u = @$_REQUEST["user"];
    $p = @$_REQUEST["pass"];
    echo "这是前端的ajax发送的数据,现在再还给前端:".$u."-------".$p;
?>

首先来同域的情况,当点击页面的时候,在控制台打印出后台的数据。

<body>
    解决ajax的跨域问题
</body>
<script src="../ajax.js"></script>
<script>
    document.onclick= function () {
        var url="http://localhost/1908/jsonp/data/data.php";
        ajax({
           url:url,
           data:{
               user:"admin",
               pass:"123456"
           },
           success: function (res) {
               console.log(res);
           }
        })
    }
</script>

在这里插入图片描述
如果将搜索栏中的localhost改成27.0.0.1或只修改php的url地址改为127.0.0.1,则会报错。(请求的资源上不存在访问控制允许源头,即出现了跨域。)
在这里插入图片描述
解决的方式通过动态创建<script>标签来实现。具体操作如下:

首先引入封装好的jsonp.js文件。

function jsonp(url,success,data){
    // 1.处理默认参数
    data = data || {};
    // 2.解析数据
    var str = "";
    for(var i in data){
        str += `${i}=${ data[i] }&`;
    }

    // 3.创建script标签,设置src,准备开启jsonp
    var script = document.createElement("script");
    script.src = url + "?" + str;
    document.body.appendChild(script);

    // 4.定义全局函数
    // window.asdasdasd = function(res){
    // window["asdasdasd"] = function(res){
    // window[data.callback] = function(res){
    // window[data["callback"]] = function(res){
    window[data[data.columnName]] = function(res){
        success(res);
    }
}

PHP代码:

<?php
    $u = @$_REQUEST["user"];
    $p = @$_REQUEST["pass"];
    $c= @$_REQUEST["cb"];
    echo $c."('这是前端的ajax发送的数据,现在再还给前端:".$u."-------".$p."')";
?>

前端操作代码:

<script src="../jsonp.js"></script>
<script>
    document.onclick= function () {
        var url="http://127.0.0.1/1908/jsonp/data/data.php";
        jsonp(url, function (res) {
            console.log(res);
        },{
            user:"admin",
            pass:"123456",
            //用来保存后台接收的回调函数名的字段名,为了给自己封装的函数传参,防止多次修改封装好的函数
            columnName:"cb",
            //根据后台要接收的字段名,发送回调函数名,已经无所谓取什么了
            cb:"abc"
        });
    };
</script>

通过以上操作,及解决了跨域访问的问题。
实现效果如下:
在这里插入图片描述
注意:jsonp不是ajax。

jsonp为什么不支持POST?

1、因为 JSONP 是通过动态创建 script 实现的
2、创建 script 只能发送 get 请求

下采样新突破!ADown模块让YOLOv11多尺度特征提取更精准 ADown 凭借可编程梯度信息与多分支特征聚合的创新设计,打破了传统下采样在特征保留上的固有局限。本教程从原理到代码实现,再到工业场景适配,完整呈现了其在 YOLOv11 中的集成路径。只需简单新增模块脚本并修改配置文件,你的目标检测模型就能在多尺度特征捕捉能力上实现跨越式提升——无论是学术研究中的小目标检测突破,还是工业场景下的复杂多尺度任务落地,ADown 都能成为你攻克下采样瓶颈的利器。现在就动手尝试,让你的检测模型在下一代下采样技术的创新中再上一个台阶吧。 阅读详情

相关推荐

压电陶瓷传感器避坑指南:实测阻抗匹配对信号输出的影响(附示波器调试技巧)

本文深入探讨压电陶瓷传感器在工业振动监测中的阻抗匹配问题,通过等效电路模型和实测数据揭示负载阻抗对信号输出的关键影响。文章提供从元件选型到示波器调试的完整解决方案,特别强调100kΩ以上负载阻抗的重要性,并分享JFET缓冲器设计和PCB布局的实用技巧,帮助工程师避免信号失真和输出不稳定问题。

ooo22的博客 516

什么是JSONP?

JSONP(JSON with Padding)是 json 的一种"使用模式",可以让网页从别的域名(网站)那里获取资料,即跨域读取数据。 由于同源政策的原因,我们从不同的域名(网站)访问数据需要一个特殊的技术———JSONP JSONP的原理 1、利用script标签的src属性来实现跨域。 2、通过将前端方法作为参数传递到服务器端,然后由服务器端注入参数之后再返回,实现服务器端向客户端通信。...

weixin_45436744的博客 1629

LTE信令流程及业务流程

eNB返回E-RAB建立响应消息,E-RAB建立列表信息中包含成功建立的承载信息,E-RAB建立失败列表消息中包含没有成功建立的承载消息。3)当下行数据达到时,网络侧先对UE进行寻呼,随后UE发起随机接入过程,并发起service request过程。用户面:S-GW向eNB发送承载建立请求,包含(IMSI, QoS, TFT, TEID, LBI等)控制面:MME向eNB发送E-RAB建立请求,包含E-RAB ID,QoS,S-GW TEID。3)在S1接口上建立S1承载,在Uu接口上建立数据无线承载。

qq_44390640的博客 4582

jsonp介绍

jsonp介绍

YY的博客 3686

如何构建智能聊天系统

聊天分为听、思考、读,简单的通过ASR、LLM、TTS三类模型的组合可以实现,最近openai推出支持多模态的GPT-4o模型,可以把三个模型真正融合成在一起。现在市面上的模型百花齐放,各有所长。要实现可落地的方案,需要结合业务,验证模型效果,同时也要考虑方案的可行性,有些模型在国内能用,有些在国内不能用。

xsgnzb的专栏 2108

最新,弱小目标检测数据集,持续更新中。

梳理了最新的下弱小目标检测数据库,方便后续开发使用

weixin_43331421的博客 4095

jsonp 详解 —— 终于搞懂 jsonp 了

JSONP 不是一门编程语言,也不是什么特别的技术,它更像一个漏洞,程序员可以利用这个漏洞,实现跨域(可以简单理解为跨域名)传输数据。在介绍 JSONP 之前,先来介绍一下浏览器的同源策略。通过 jsonp,我们可以避开浏览器的同源策略,从而进行跨域请求。jsonp 是利用 HTML 标签的 src 属性引用资源不受同源策影响的特性来实现的,实现步骤如下:通过动态创建 script 标签,其 scr 指向非同源的 url,并传递一个 callback 参数给服务端。

M_emory_的博客 1万+

电力-平衡式IEC 60870-5-101规约报文解析

本文详细介绍了电力自动化中平衡式IEC 60870-5-101规约的应用,包括链路建立与初始化、对时、遥控操作、数据上送和总召唤等关键步骤,通过实例解析了报文格式和交互过程,是理解配网自动化通信的重要参考资料。

让你爱上电路设计 5684

jsonp原理详解——终于搞清楚jsonp是啥了

一、JSONP的由来 1、Ajax直接请求普通文件存在跨域无权限访问的问题,不管是静态页面、动态页面、web服务,只要是跨域请求,一律不准。 2、不过我们发现,web页面调用js文件则不受跨域的影响(不仅如此,我们还发现凡是拥有“src”这个属性的标签都拥有跨域的能力,比如<\script>、<\img>、<\iframe>)。 3、于是可以判断,当前阶段如果想通过纯web端跨域访问数据就只有一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用

学Java,找哪吒 2万+

ArcGIS插值可视化气象数据

前言 地图底图的制作和气象数据的预处理见我上两篇博客 ArcGIS精美中国地图制作(详解) python处理日值气象数据 在前面我们已经将日值的地温数据处理成了年均地温,添加了站点经纬度坐标并导出为excel格式。 得到如下数据: 导入数据 在Arcmap中 文件-添加XY数据 将年均地温和站点位置数据导入。 注意:excel表格的格式要另存为97-2003工作簿形式,否则会有"arcgi...

江北20190411的博客 2万+

Windows 24H2下eNSP AR_40启动失败的终极修复指南

本文针对Windows 11 24H2更新后eNSP AR_40路由器启动失败的问题,提供了终极修复方案。核心在于解决系统强制虚拟化安全(VBS/Hyper-V)与老版模拟软件的兼容性冲突。指南详细介绍了安装关键系统更新KB5053656、精细调整Windows虚拟化功能以及后续排错步骤,帮助用户在24H2系统上稳定运行eNSP进行网络实验。

weixin_29233333的博客 507

JSONP是什么

查资料的解释: JSONP数据交互协议一般用于Ajax跨域请求。Ajax直接请求普通文件存在跨域无权限访问的问题,然而web页面上调用js文件则不受是否跨域的影响(凡是拥有src该属性的标签都有跨域的能力),于是通过web端跨域访问数据的时候,设法把数据装进js格式的文件里面。获取之后便可以在web端进一步进行处理。 为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一 个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将

ZQY1436556395的博客 578

在 ABAP 平台上搭建 OAuth 2.0 Server:架构、流程、权限与落地实战

摘要:本文为SAP ABAP开发人员提供将ABAP平台配置为OAuth 2.0授权服务器的实战指南。重点介绍两种授权流程(授权码和SAML Bearer)的实现方案,包括核心事务配置(SOAUTH2/SAML2)、授权对象(S_SCOPE)管理以及端点交互规范。通过具体配置清单和三类典型集成场景(第三方Web应用访问OData、企业集成平台调用、BTP应用对接)的落地示例,帮助读者快速构建安全的OAuth 2.0服务架构。文档强调SSL/TLS基础安全、scope最小授权原则以及授权与令牌端点的标准交互模式

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 309

使用JSONP解决跨域

1.首先需要知道什么是跨域 浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 出于浏览器的同源策略限制 同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响 *同源策略限制内容有: Cookie、LocalStorage、IndexedDB 等存储性内容 DOM 节点 AJAX 请求发送后,结果被浏览器拦截了 2.什么是JSONP? JSONP是JSON with P

daisy 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

浅谈JSONP跨域漏洞

浅谈JSONP跨域漏洞 CSRF(Cross site request forgery)跨站请求伪造,一种挟持用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法,跟XSS相比,XSS 利用的是网站对用户的信任,CSRF 利用的是网站对用户网页浏览器的信任。 提起CSRF,可能很多人都会想到修改个人资料、授权登陆等等攻击场景,可以发现这两个场景都是写入型的CSRF漏洞,通常会忽视更常见的读取型的CSRF漏洞,主流如下两种 JSONP跨域资源读取 CORS跨域资源读取 当持有敏感资源数据的服务器没

weixin_39664643的博客 4615

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jsonp解决跨域问题

JSONP解决跨域问题一级目录二级目录三级目录1. jsonp方案 一级目录 二级目录 三级目录 1. jsonp方案 jsonp实现跨域请求的原理: 动态创建在这里插入代码片

IvyMemphis的博客 9454

jsonp跨域的原理

1. 前言 jsonp是一种常用的跨域手段,和反向代理,服务端做跨域处理相比,jsonp更显得方便轻巧,因而被大量用来处理跨域的请求,那么,这种请求方式到底是用了什么黑魔法,来解决令我们头疼的跨域问题。 2. 原理 jsonp其实并没有用到什么黑魔法,能达到跨域这种效果,无非是利用script标签自身的跨域能力。我们知道,img,script,这种标签如果有相应的src,那么便会发起一个htttp请求来请求相应的资源,如果有script标签对应的路径是一个js文件,那么在下载完毕这个js之后会马上

qq_38756314的博客 3144

跨域技术之jsonp

随着前端的飞速发展,近些年 jsonp技术应用的越来越少,但是我们还是需要详细的去了解jsonp,这对于我们如何去和后台配合有极大的意义 jsonp 在

m0_47883103的博客 3967

跨域解决方案之JSONP

在 Web 开发领域,跨域问题始终是开发者需要攻克的难关。浏览器的同源策略严格限制了不同源(协议、域名、端口任意一项不同)之间的资源访问,导致 AJAX 请求无法直接获取跨域数据。JSONP(JSON with Padding)作为早期流行的跨域解决方案,利用<script>标签的特性巧妙绕过这一限制。虽然如今 CORS 已成为主流,但 JSONP 的原理与应用仍值得深入了解。

跟佟格湾一起学习计算机知识吧~ 1540

Jsonp解决跨域问题

JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的&lt;script&gt; 元素是一个例外。利用 &lt;script&gt; 元素的这个开放策略,网页可以得到从其他来源动...

菜园子丶For丨丶Tomorrow的博客 5620

JSONP跨域的原理

JSONP跨域请求

weixin_44286392的博客 2670

通过JSONP实现跨域访问

跨域访问 说到跨域访问就要谈到浏览器的同源策略,所谓同源指的就是协议相同、域名相同、端口号相同,三个条件必须全部匹配,否则就会收到限制,例如: Cookie、LocalStorage 和 IndexDB 无法读取 DOM 无法获得 AJAX 请求不能发送 而互联网默认原则就是同源策略,也就是说不允许跨域访问。 常见的跨域可以通过标签元素实现,例如link、script、img、iframe等标签。 <!DOCTYPE html> <html lang="en"> <hea

小康博客 1725

JSONP跨域原理

JSONP跨域相关问题 问题起源: ​ 由于同源策略,AJAX直接请求普通文件存在跨域无权限访问的问题。 JSONP跨域原理: ​ 利用了src不受同源策略的影响 ,可以访问其他页面的数据。 源生JS实现JSONP的步骤: 客户端 定义获取数据后调用的回调函数 动态生成对服务端JS进行引用的代码 设置url为提供jsonp服务的url地址,并在该url中设置相关callback参数 创建scr...

丁晓东go 327

跨域及jsonp

欢迎访文我的博客YangChen’s Blog昨天参加了网易的前端开发实习生面试,分为两次技术面试和一次HR面试,PS.网易的校招和面试效率还是挺高的。这两次技术面试都问到了跨域及jsonp的问题,所以呢就为此写一下吧,这也是前端开发中绕不过的一个重点。什么是跨域?要解释跨域,就要先说明下什么是域?域的英文名是Domain,百度百科给的定义是: 域(Domain)是Windows网络中独立运行的

yc123h的博客 1115

jsonp跨域原理_JsonP

一、 JsonP 简介什么是 JsonP Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站) 那获取资料,即跨域读取数据。 为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP )呢?这是因为同 源策略。 什么是跨域? 跨域是指一个域(网站)下的文档或脚本试图去请求另一个域(网站)下的资源。 什么是同源策略? 同...

weixin_40008135的博客 390

JSONP 实现跨域的原理

JSONP 是利用<script>标签进行跨域请求的技术,解决了浏览器的同源策略限制。它的原理是通过将回调函数名作为查询参数传递给服务器,服务器返回一段调用该回调的 JavaScript 代码。JSONP 简单易用,但只能支持 GET 请求,并且存在安全隐患,因此在现代 Web 开发中,CORS 是更推荐的解决方案。

weixin_63726940的博客 1384

JSONP跨域请求

前言 与跨域相反的是同源,浏览器出于安全性考虑都会选用同源策略,主要是限制cookie、DOM、JS对象的获取,此外AJAX请求也不能发送。显然同源策略限制了前端的向外拓展的能力,实际应用中可以使用跨域请求来实现对外拓展。跨域顾名思义就是请求域名不同,如果考虑到细节,同一域名不同端口、同一域名不同协议也算跨域。举个例子,当前项目的请求是自己的公司域名下的链接,但是又想引用百度或者其他开放的API...

dosthing的博客 5113
上一篇: PHP+Bootstrap+原生Ajax+MySQL实现前后端交互(下)——实现分页效果
下一篇: git 常用命令
伦为JAY下囚
博客等级 码龄7年 52粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值