JSONP跨域请求
发布时间 - 2026-01-10 23:23:20 点击率:次什么是跨域:

1、域名不同
2、域名相同端口不同
js出于对安全考虑不支持跨域请求。我们可以使用JSONP解决跨域问题。
一、JSONP是什么
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页js是无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。
原理:浏览器在js请求中,是允许通过script标签的src跨域请求,可以在请求的结果中添加回调方法名,在请求页面中定义方法,既可获取到跨域请求的数据。(js请求的不是一个单纯的json数据而是一段包含json数据的js脚本)
二、模拟JSONP
服务器域名:http://localhost:8081/rest/itemcat/list
客户端服务器:http://localhost:8082/test.html
1、普通的JS跨域请求
服务器数据:
客户端请求代码:
$(function(){
$.ajax( {url: "http://localhost:8081/rest/itemcat/list?callback=myFunction",
success: function(data){
console.info(data)
}});
});
结果
XMLHttpRequest cannot load http://localhost:8081/rest/itemcat/list?callback=myFunction. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8082' is therefore not allowed access.
2、模拟JSONP请求
客户端请求代码:
$(function(){
greateScript("http://localhost:8081/rest/itemcat/list");
function greateScript(src) {
$("<script><//script>").attr("src", src).appendTo("body")
}
});
结果:
list?_=1488425374097:1 Uncaught SyntaxError: Unexpected token :
三、使用JSONP
环境:
服务器域名:http://localhost:8081/rest/itemcat/list
客户端服务器:http://localhost:8082/test.html
服务端代码(本人使用springmvc4):
@RequestMapping("/itemcat/list")
@ResponseBody
public Object getItemCatList(String callback) {
CatResult catResult = itemCatService.getItemCatList();
MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(catResult);
//设置JSONP回调函数
mappingJacksonValue.setJsonpFunction(callback);
return mappingJacksonValue;
}
客户端调用代码:
$(function(){
$.ajax(
{ url: "http://localhost:8081/rest/itemcat/list",
dataType: "jsonp",
jsonp: "callback",
success: function(data){
console.info(data)
}});
});
结果:
看返回结果可以发现返回的数据不是一段单纯的json数据,而是一段js函数。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# jsonp
# 跨域请求
# JSONP跨域GET请求解决Ajax跨域访问问题
# AJAX跨域请求之JSONP获取JSON数据
# 跨域请求的完美解决方法(JSONP
# CORS)
# JSONP跨域请求实例详解
# 关于JSONP跨域请求原理的深入解析
# 客户端
# 回调
# 是一个
# 不支持
# 可以使用
# 既可
# 可以得到
# 抓到
# 服务端
# 而不是
# 可用于
# rest
# list
# itemcat
# localhost
# center
# align
# function
# http
# pre
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
浅析上传头像示例及其注意事项
Android利用动画实现背景逐渐变暗
如何基于云服务器快速搭建网站及云盘系统?
网站优化排名时,需要考虑哪些问题呢?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
个人网站制作流程图片大全,个人网站如何注销?
使用C语言编写圣诞表白程序
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
如何在万网主机上快速搭建网站?
如何用wdcp快速搭建高效网站?
如何快速生成高效建站系统源代码?
如何在云主机上快速搭建多站点网站?
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
Laravel怎么在Controller之外的地方验证数据
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
历史网站制作软件,华为如何找回被删除的网站?
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Laravel如何使用查询构建器?(Query Builder高级用法)
如何在万网开始建站?分步指南解析
怎样使用JSON进行数据交换_它有什么限制
EditPlus中的正则表达式 实战(2)
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
如何在云主机上快速搭建网站?
如何在万网ECS上快速搭建专属网站?
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
如何确保西部建站助手FTP传输的安全性?
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
如何在Ubuntu系统下快速搭建WordPress个人网站?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
如何为不同团队 ID 动态生成多个独立按钮
JavaScript Ajax实现异步通信
Laravel如何使用Eloquent进行子查询
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
如何在IIS中新建站点并配置端口与物理路径?
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
PHP正则匹配日期和时间(时间戳转换)的实例代码
js代码实现下拉菜单【推荐】
如何在IIS管理器中快速创建并配置网站?
如何快速打造个性化非模板自助建站?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
下一篇:Yii2为何性能高?
下一篇:Yii2为何性能高?

