jsonp相关知识
-
简易Jsonp请求JSONP(JSON with Padding)是[JSON]的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。通俗来说,浏览器默认不支持跨域请求,但是script标签支持访问其它域名的数据,jsonp数据返回的是个javascript函数,函数中的参数是要使用的json数据。查看数据类型使用方式<!DOCTYPE html><html lang="en"&g
-
ajax跨域请求之JSONP的使用之前在工作中遇到了跨域访问的问题,此次记录使用json的过程。注意:jsonp只适合类型为get的请求;只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。 $.ajax({ type:"get", //请求方式,此处给post仍会以get方式提交 dataType:"jsonp",//预期服务器返回的数据类型 jsonp:"callback",//在一个jsonp请求中重写回调函数的名字 jsonpCallback:"callback",//为jsonp请求指定一个回调函数名 url:"http://127.0.0.1/login", //请求地址 data:"{name:'
-
学习、阅读笔记——jsonP&amp;Ajax一、jsonPjsonP,客户端浏览器不允许跨域访问,当服务器的协议、地址、端口号有一个不同时,即为跨域。jsonP是json Padding的缩写,Padding可理解为后缀或者是填充。jsonP的重要特殊是具有一个回调函数,回调函数是调用者调用被调用域服务的标记,callback运行在被调用域服务器上。jQuery支持jsonP,语法如下:jQuery.getJSON("http://www.yourdomain.com/jsonp/ticker?symbol=IBM&callback=?", function(data) { alert("Symbol: " + data.symbol + ", Price: " + data.price); });?为回调函数名,
-
spring后台和jsonp解决跨域问题为什么会发生AJAX跨域 1.浏览器限制 2.跨域 :协议 域名 端口 3.XHR(xmlhttprequest)请求才会报跨域问题 同时满足以上3點才会产生跨域安全问题 解決思路 使用jsonp 原因:不使用XHR(xmlhttprequest)请求 前端代码 $.ajax({ url : interfaceUrl, type : "get", dataType : "jsonp", data : paramObj, jsonp: "callbackparam", jsonpCallback: "success_jsonpCallback", success : function(result) { …… } 后端代码 @GetMapping(value = "/map", pr
jsonp相关课程
jsonp相关教程
- 3.1 JSONP JSONP 是一个非常经典的解决跨域的方法。我们知道,在 HTML 中,一些资源的引用事实上是不会受到跨域限制的,比如 script 标签。浏览器在解析 HTML 的时候,解析到了 script 标签,会把相应的资源下载下来。我们可以利用这一点,来实现前后端信息的交互。3.1.1 JSONP 原理定义好回调函数,比方说命名为 callback ,并将函数名作为 url 的参数;添加 script 标签,指定的资源为目标域的方法,也就是上面的 url ;后端接收 GET 请求,返回 callback(responseData) 格式数据,把要返回的数据 responseData 传到 callback() 中;前端接收 javaScript 内容,执行了后端返回的 callback(responseData) ,这样就完成了一次前后端交互了。3.1.2 具体例子假如 HTML 有一个容器为 container,我们要通过 JSONP 的方式来为 container 插入一条内容,那么,我们可以这么做:3.1.2.1 HTML 关键代码<div id="container"></div>3.1.2.2 javaScript 关键代码// jsonp// 定义一个添加内容的回调函数window.addContent = function (content) { document.getElementById('container').innerHTML = content;}/*** 发送 JSONP 请求的函数* cb 为回调函数的函数名*/function sendJsonPRequest (cb) { // 创建 script 标签 const body = document.getElementsByTagName('body')[0]; const script = document.createElement('script'); script.type = 'text/javascript'; // 指定标签的 url ,callback 参数为回调函数的函数名 script.src = `http://localhost:8082/jsonp/get?callback=${cb}`; body.appendChild(script); // 添加到 body 最后面}sendJsonPRequest('addContent') // 执行发送 JSONP 请求显而易见,前端我们会创建一个 script 标签,并且附带定义好的回调函数的函数名传给服务端。与此同时,我们需要在服务端进行 JSONP 请求的响应。3.1.2.3 服务端关键代码router.get("/jsonp/get", function(req, res) { const cb = req.query.callback; // 读取请求附带的参数 callback const resData = '这是一条服务端返回的内容'; res.send(`${cb}(${JSON.stringify(resData)})`); // 返回 callback(resData) 格式的数据});3.1.2.4 效果从右边控制台可以看出来,我们成功创建了 JSONP 的请求,并且结果正如我们预期的执行了 addContent('这是一条服务端返回的内容'),界面上展示出插入的内容。3.1.3 JSONP 小结使用 JSONP 的方式,我们可以通过 script 标签绕过浏览器的跨域限制,进行前后端数据交互。不过另一方面,这种方法也很有局限性,我们只能够发送 GET 请求,无法满足更加复杂业务的需求。一般我们也不会推荐直接使用 JSONP 的方式来解决跨域问题。
- 2. content 阶段 content 阶段中最主要的 static 模块,该模块提供了root 和 alias 这两个常用的指令。二者的用法如下:Syntax: alias pathDefault: —Context: locationSyntax: root pathDefault: root htmlContext: http, server, location, if in location可以看到,单从指令用法上就可以看到不少区别,首先是 alias 指令没有默认值,而且该指令只能在 location 中使用。而 root 可以存在与 http、server、location 等多个指令块中,还可以出现在 if 指令中。另外,最最主要的不同是两个指令会以不同的方式将请求映射到服务器文件上。root 指令会用[root 路径 + location 路径]的规则映射静态资源请求,而 alias 会使用 alias 的路径替换 location 路径。此外 alias 后面必须要用“/”结束,否则会找不到文件的,而 root 则可有可无。来看下面一个例子:location ^~ /test { root /root/html/;}location ^~ /test2/ { alias /root/html/;}对于 http 请求: http://ip:端口/test/web1.html访问的是主机 上全路径为 /root/html/test/web1.html的静态资源;而请求http://ip:端口/test2/web1.html 访问的是全路径为/root/html/web1.html的静态资源,/test2/已经被替换掉了。在 static 模块中,还提供了 3 个变量供我们使用,分别是:request_filename: 访问静态资源的完整路径document_root: 访问静态资源文件所在目录realpath_root: 如果 document_root 是软链接,则改变量会将其替换成真正的地址同样是上面的例子,稍做改动: location /web { default_type text/html; alias /root/test/web; return 200 '$request_filename:$document_root:$realpath_root\n'; }访问 http://ip:端口//web/web1.html, 返回的结果为:/root/test/web/web1.html:/root/test/web:/root/test/web在 content 阶段,在 static 模块之前,还会执行的模块有 index 和 autoindex模块。index 模块提供了 index 指令,用于指定/访问时返回 index 文件内容。autoindex 模块会根据配置决定是否以列表的形式展示目录下的内容,这个功能在后续实战中搭建内部 pip 源中会用到。Syntax: index file ...;Default: index index.html;Context: http, server, location# 示例,访问 uri=/ 时,返回静态资源 index.html 文件中的内容location / { index index.html;}# 是否开启目录显示,默认Nginx是不会显示目录下的所有文件Syntax: autoindex on | off;Default: autoindex off;Context: http, server, location# 显示出文件的实际大小Syntax: autoindex_exact_size on | off;Default: autoindex_exact_size on;Context: http, server, location# 显示格式,默认是html形式显示Syntax: autoindex_format html | xml | json | jsonp;Default: autoindex_format html;Context: http, server, location# 显示时间,设置为on后,按照服务器的时钟为准Syntax: autoindex_localtime on | off;Default: autoindex_localtime off;Context: http, server, location
- 快速排序 算法,程序员自我提升必经之路
- 09 详解视图与路由 结合 RESTful 规范开发 Web 项目
- 17.7【应用】HATOEAS与请求媒体类型 .Net Core 开发电商后端API
- 3-24 拦截器 - 用户会话拦截器 Spring Cloud分布式微服务实战
jsonp相关搜索
-
j2ee
j2ee是什么
jar格式
java
java api
java applet
java c
java jdk
java list
java map
java script
java se
java socket
java swing
java switch
java web
java xml
java 程序设计
java 多线程
java 环境变量