观看记录
  • 我的观影记录
登录
测试首页前端跨域请求jsonp实现

前端跨域请求jsonp实现

      跨域问题来历于JavaScript的同源策略,即只有 和谈+本家儿机名+端标语 (如存在)不异,则许可彼此拜候,有一种分歧即不克不及拜候。也就是说JavaScript只能拜候和操作本身域下的资本,不克不及拜候和操作其他域下的资本。跨域问题是针对JS和ajax的,html自己没有跨域问题,好比a标签、script标签、甚至form标签(可以直接跨域发送数据并接收数据)等 。

      JSONP(JSON with Padding)是JSON的一种“利用模式”,可用于解决本家儿流浏览器的跨域数据拜候的问题。因为同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的办事器沟通,而 HTML 的<script> 元素是一个破例。操纵 <script> 元素的这个开放策略,网页可以获得从其他来历动态发生的 JSON 资料,而这种利用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是肆意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。

工具/原料

  • 电脑
  • java便捷东西 intellij IDEA或者eclipse
  • 前端编纂东西HBuilder非必需可以利用java编纂东西取代

第一步调:建立一个javaweb项目

  1. 1

    第一种:建立一个springboot的项目。

    1、 打开建立页面 选择File-new-project..

    2、选择建立的项目为spring initializr 进入springboot项目建立步调(也可以选择类型java,建立一个通俗java项目)

    3、输入项目名字,选择依靠web(按照项目需求选择,此次需要),选择存放目次-完当作(Finish)

  2. 2

    第二种:建立一个简单的javaweb项目。

    1、直接打开:https://jingyan.baidu.com/article/ff411625048acf12e482373a.html

    2、或者百度搜刮:servlet类如何映射到url路径 百度经验

第二步调:项目筹办

  1. 1

    第一步:编写被挪用项目标controller。

    1、需要集当作springmvc,springboot项目集当作web就包含springmvc,通俗的servlet需要:

    PrintWriter w = response.getWriter();w.print(json);

    2、端口默认8080

    3、controller代码如下所示

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.bind.annotation.RestController;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import java.util.Map;

    @RestController

    public class TestController {

    @RequestMapping("/bean")

    public String testJson(HttpServletRequest request,

    HttpServletResponse response, Map paramMap) {

    String callback = request.getParameter("callback");

    String id = request.getParameter("id");

    String name = request.getParameter("name");

    String sex = request.getParameter("sex");

    String json ="{'id':" + id +",'name':'" + name +"','sex':'" + sex

    +"'}";

    if (callback != null) {

    json = callback +"(" + json +")";

    }

    return json;

    }

    }

    4、启动办事并测试:

    http://localhost:8080/bean?id=2&name=张三&sex=男

  2. 2

    第二步:挪用项目标筹办。

    1、新建一个javaweb项目

    2、在端标语设置为8020

    3、编写跨域挪用代码,本家儿如果页面js的编写

第二步调:jsonp事项跨域的体例

  1. 1

    第一种:原生的js实现跨域。

    1、借助于原生javascript实现,具体代码如下所示:

    window.onload = function () {

     var script = document.createElement('script');

     script.setAttribute("type","text/javascript");

     script.src = 'http://localhost:8080/bean?callback=ajaxCallback&id=2&name=张三&sex=男';

     document.body.appendChild(script);

    }

     

    function ajaxCallback(data) {

     alert('response data: ' + JSON.stringify(data));

    };

  2. 2

    第二种:借助于jquery的getJSON实现。

    具体代码如下所示:

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>跨域测试</title>

    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>

    </head>

    <body>

    <script>

    $.getJSON("http://localhost:8080/bean?callback=?", {id:2,name:'李四',sex:'男'},

        function(data) {

    alert(data.id+data.name+data.sex);

    });

    </script>

    </body>

    </html>

  3. 3

    第三种:借助于jquery的ajax实现。

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>跨域测试</title>

    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>

    </head>

    <body>

    <script>

    $.ajax({

            //设置请求类型

            type:"get",

            //请求超不时间

            timeout:5000,

            //设置请求地址

            url: 'http://localhost:8080/bean',

            //设置需要发送的数据

            data: {id:2,name:'李四',sex:'男'},

            //界说此请求为跨域请求

            dataType: 'jsonp',

            //界说回调函数

            jsonpCallback:"callbackUser",

            success: function (data) {

    console.log("当作功");

            },

            error: function (data) {

               console.log(data)

            }

        })

    function callbackUser(data){

    alert("id:"+data.id+" name:"+data.name+" sex:"+data.sex);

    }

    </script>

    </body>

    </html>

  4. 4

    第四种:本家儿如果对三种的优化。

    1、本家儿如果去除jsonpCallback属性,url中传callback=?界说默认挪用ajax的回调函数。要与后台代码对应(String callback = request.getParameter("callback");)

    2、挪用项目页面如下所示:

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>跨域测试</title>

    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>

    </head>

    <body>

    <script>

    $.ajax({

            //设置请求类型

            type:"get",

            //请求超不时间

            timeout:5000,

            //设置请求地址

            url: 'http://localhost:8080/bean?callback=?',

            //设置需要发送的数据

            data: {id:2,name:'李四',sex:'男'},

            //界说此请求为跨域请求

            dataType: 'jsonp',

            success: function (data) {

    console.log("当作功");

    alert("id:"+data.id+" name:"+data.name+" sex:"+data.sex);

            },

            error: function (data) {

               console.log(data)

            }

        })

    </script>

    </body>

    </html>

第四步调:总结

  1. 1

    1、jsonp实现的体例就是借助于script标签的src属性获取数据,然后将数据作为参数传给函数,解析数据。这一点我们需要连系后台callback +  "(" + json +")"

    可以看出一二。

    2、跨域问题的解决方案除了jsonp体例外还有一种CORS,与jsonp分歧的是这是一种后台解决方案。

注重事项

  • jdk 1.8

“前端跨域请求jsonp实现”关联的文章

  • 如何关闭皮皮搞笑精彩内容消息通知

    皮皮搞笑是一款手机搞笑社区App,让用户笑到没心没肺,又忍不住感动流泪的温暖家园,那么如何关闭皮皮搞笑精彩内容消息通知以满足不同用户的需求呢?

    41分钟前0阅读

    如何关闭皮皮搞笑精彩内容消息通知
  • win7系统找不到宽带连接怎么办

    现如今很多用户都喜欢使用win7系统,而在使用win7系统的过程中做的最多的就是上网了。Win7系统上网离不开宽带连接,如果win7宽带连接找不到了,应该怎么办呢?下面就让小编为大家带来win7系统找不到宽带连接解决方法

    41分钟前0阅读

    win7系统找不到宽带连接怎么办
  • 新版QQ音乐怎么关闭底部的直播导航

    新版QQ音乐怎么关闭底部的直播导航?下面请大家随小编一起来看看操作的方法吧。

    41分钟前0阅读

    新版QQ音乐怎么关闭底部的直播导航
  • 怎样查询高速实时路况?

    要出行怎么查询高速实时路况?我们用地图就可以了,在地图上就可以看到实际的路况的,下面详细来看下。

    41分钟前0阅读

  • 六芒星手势密码教程

    41分钟前0阅读

    六芒星手势密码教程
  • 教师讲课过程评价标准

    教师是太阳底下最光辉的职业,但是成为教师之路也是要经历重重考验的,下面给大家说说教师讲课过程评价标准

    41分钟前0阅读

  • 酚醛铝箔夹芯板

    酚醛铝箔夹芯板是由酚醛泡沫与两层亚光铝箔经过特殊工艺复合而成。外膜材料为经过高温固化的高分子膜,可有效的防止紫外线及气体腐蚀,并与铝箔结合牢固,又能与酚醛泡沫形成聚合物,从而保证象圆酚醛铝箔夹芯板的质量稳定。

    41分钟前0阅读

  • Xperia XZ2 Premium配置如何

    Xperia XZ2 Premium是索尼在4月16日悄悄发布的新机,而且没进行预热,下面来简单了解一下配置。

    41分钟前0阅读

  • PLSQL破解,无需注册码和破解工具

    PL/SQL Developer过期了,又没有注册码,又不想花钱买,而且事情又非常急,这时候怎么办?不要着急,请随小编一起解决这种情况吧。

    41分钟前0阅读

  • Win11按capslock切换不了大小写怎么解决

    有朋友不知道在哪里设置,下面小编就给大家分享详细的设置方法,有需要帮助的朋友可以参考下这篇经验,希望能对大家有所帮助。

    1小时前0阅读

    Win11按capslock切换不了大小写怎么解决
切换深色外观
留言
视频编辑修改
回到顶部
首页
手机数码
医疗健康
金融管理
社交情感
无名