百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

JQuery ajax jsonp 跨域理解(jquery的jsonp方式跨域请求)

suiw9 2025-04-06 20:48 6 浏览 0 评论

1、先来两个jsonp的写法看看


//简写形式


$.getJSON("http://app.example.com/base/json.do?sid=1494&busiId=101&jsonpCallback=?",

function(data){

$("#showcontent").text("Result:"+data.result)

});

*/


$.ajax({

type : "get",

async:false,

url : "http://app.example.com/base/json.do?sid=1494&busiId=101",

dataType : "jsonp",//数据类型为jsonp

jsonp: "jsonpCallback",//服务端用于接收callback调用的function名的参数

success : function(data){

$("#showcontent").text("Result:"+data.result)

},

error:function(){

alert('fail');

}

});


JSONP是JSON with Padding的略称,JSONP为民间提出的一种跨域解决方案,通过客户端的script标签发出的请求方式。


2同源请求和跨域请求

现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。


而所有非同源的请求(即 域名,协议,端口 其中一种或多种不相同),都会被作为跨域请求,浏览器会将其非同源的响应数据丢弃。


这里可以理解为是浏览器在搞事情,服务端确确实实有返回数据,浏览器接收到返回的数据,发现我们请求的是一个非同源的数据,浏览器再将其响应报文丢弃掉。


而通过一些标签发出的请求则不会被进行同源检查,比如script标签,img标签等等,本文讲述JSONP便是通过script标签做的请求。


例如:1、声明一个全局变量

window.myCallback = (res)=>{ //声明一个全局函数 'callback',用于接收响应数据 console.log(res) }

2、发出请求

<script>

window.myCallback = (res)=>{//这里为上一步定义的全局函数

console.log(res)

}

</script>

<script url="xxx?callback=myCallback">

//script标签的请求必须在写在定义全局函数之后

//这里需将全局函数的函数名作为参数callback的value传递

//这里callback这个键名是前后端约定好的

</script>

原文链接:
https://blog.csdn.net/weixin_44411976/java/article/details/100035936

3、服务端返回数据格式

myCallback({ //一个函数的调用,将数据作为参数传递进去,再将整个函数的调用返回给客户端 name:'ahreal', age:18 })

4、客户端接收到服务端的相应,相当于:

<script>

window.myCallback = (res)=>{//这里为上一步定义的全局函数

console.log(res)

}

</script>

<script>//将接收到的数据作为script标签里面的内容展开执行

myCallback({

name:'ahreal',

age:18

})

</script>


参数

jsonp

类型:String

在一个 jsonp 请求中重写回调函数的名字。这个值用来替代在 "callback=?" 这种 GET 或 POST 请求中 URL 参数里的 "callback" 部分,比如 {jsonp:'onJsonPLoad'} 会导致将 "onJsonPLoad=?" 传给服务器。

jsonpCallback

类型:String

为 jsonp 请求指定一个回调函数名。这个值将用来取代 jQuery 自动生成的随机函数名。这主要用来让 jQuery 生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存 GET 请求的时候,指定这个回调函数名。

如果不设置 jquery会自动调用seccess函数


相关推荐

C和Java效率对比试验和编译器优化影响

首先得承认这不是一个好例子,逻辑过于简单,受环境的干扰也特别大。不能作为评价一门语言综合效率的用例,仅仅是基于个人兴趣的小实验的记录。C语言版本1#include...

Java 代码执行原理(java代码是如何执行的)

专注于Java领域优质技术,欢迎关注作者|Alan来源|cnblogs.com/wangjiming/p/10455993.html对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者...

JVM底层原理之如何选用C1、C2编译器?它们有什么区别?

JVM底层原理之如何选用C1、C2编译器?它们有什么区别?关于JVM底层的C1、C2编译器,很多人不知道它的具体概念,本篇我们详细的讲解一下。...

阿里巴巴Java性能调优实战:深入JVM即时编译器JIT,优化Java编译

深入JVM即时编译器JIT,优化Java编译然而许多Java开发人员对JIT编译器的了解并不多,不深挖其工作原理,也不深究如何检测应用程序的即时编译情况,线上发生问题后很难做到从容应对。类编...

JPHP--一款基于JVM的新PHP编译器(php 编译)

JPHP是一款基于Java语言编写的PHP编译器以及新运行时库,支持多线程、unicode字符串(UTF-16)、GUI、Android开发以及嵌入式Web应用。JPHP可以将PHP源码编译成JVM字...

Java:开源Java编译器的下一个前沿——实时编译即服务

  对于Java开发人员来说,实时(JIT)编译器是提高性能的关键。然而,在容器世界中,由于CPU和内存消耗的限制,性能的提高经常被抵消。为了帮助解决这个问题,EclipseOpenJ9JVM提供...

45张图带你从入门到精通学习WireShark

你好,这里是网络技术联盟站。...

Linux(麒麟)下如果使用wireshark抓包工具

Linux(麒麟)下如果使用wireshark抓包工具一、安装wireshark1、通过命令将麒麟系统iso文件挂载到/mnt2、进入到/mnt/KYLIN3、通过yuminstall安装两个安装...

强烈推荐APP破解常用工具集合(破解软件推荐)

抓包...

wireshark长时间抓包分多个文件(wireshark 长时间抓包)

http://www.cnblogs.com/wangqiguo/p/5068602.html推荐理由一般使用wireshark不需要长时间抓包的,但是有时候遇到网络通信中非常棘手的问题,例如一个小...

wireshark抓包教程详解(wireshark抓包全集)

如果本文对你有帮助,欢迎关注、讨论、点赞、收藏、转发给朋友,让我有持续创作的动力,让我们一起相互学习共同进步。...

收藏!Wireshark最好用的抓包命令都在这了!

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友。在现在,网络流量的监控与分析变得尤为重要。无论是排查网络故障、优化性能还是确保网络安全,都需要精...

Wireshark快捷键大全,记住后抓包效率杠杠的

不管你是网络管理员、程序员还是安全工程师,Wireshark都是你的得力助手,用来排查问题、分析流量,甚至学习网络协议。...

渗透测试抓包工具-wireshark(渗透测试脚本)

wireshark功能介绍1.抓包嗅探协议分析2.安全专家必备的技能...

wireshark网络抓包详解(利用wireshark抓包工具抓取网络数据包)

一、简介...

取消回复欢迎 发表评论: