zoukankan      html  css  js  c++  java
  • jsonp

    跨域

      域名或者端口不同的请求称为跨域,ajax请求默认不允许跨域,但是引入js文件允许跨域

    如何解决ajax请求跨域问题

    设有manage_taotao和web_taotao两个项目,已设置本地域名,要在web的项目中跨域请求manage中的地址。在b.htm文件中

    <script type="text/javascript">
        function fun(msg){
            console.log(msg)
        }
    </script>
    <script type="text/javascript" src="http://manage.taotao.com/rest/a/origin?callback=fun"></script>

    而在manage项目中controller层

    @Controller
    public class AController {
        @RequestMapping("a/origin")
        @ResponseBody
        public String origin(String callback) throws JsonProcessingException {
            ObjectMapper mapper=new ObjectMapper();
            Map<String, Object> map=new HashMap<String, Object>();
            map.put("妈妈", "she");
            map.put("age", 50);
            String m = mapper.writeValueAsString(map);
            return callback+"("+m+")";
        }
    }

    引入的js文件能直接接收路径返回的值,本来是json字符串,但b.htm不能直接解析该字符串,所以将该json字符串用 方法名() 的形式包围,在解析时提前定义方法,就可以在控制台打印该字符串

    尝试:在web项目引入manage项目中的js文件,再由该文件调用请求行吗?

    <script type="text/javascript" src="http://manage.taotao.com/js/testOrigin.js"></script> 
    <script type="text/javascript">
        alert(test())
    </script>

    manage项目中有该js

    ;!function(global){
        function test(){
            $.ajax({
            url:"http://manage.taotao.com/rest/a/origin",
            success:function(data){
                return data
            }
        })
        }
        global.test=test
    }(this)

    测试后,仍然出现ajax跨域请求问题,将js的路径改为工程下的绝对路径,发现访问的是web项目下的地址,说明manage项目中的该js被加载到了web项目服务中,这样访问本质上和直接访问没有什么区别。

    jsonp

      1.通过script标签可以跨域请求的特性,加载资源

      2.将加载的资源(通过一个方法名将数据包裹)当作是js脚本解析

      3.定义一个回调函数,获取传入的数据

    jquery中封装了jsonp技术。在b.htm中写

    <script type="text/javascript">
    $.ajax({
        url:"http://manage.taotao.com/rest/a/origin",
        dataType:"jsonp",
        success:function(msg){
            console.log(msg)
        }
    })
    </script>

    controller不变,可以获得结果

  • 相关阅读:
    linux 更换golang版本
    ubuntu 搭建NFS
    golang 异步并发http轮询(爬虫)
    Mysql 事务锁等待时间超时
    排序算法之鸡尾酒排序
    Sql Server一个表向另一个表添加多条数据,关联时查询出一条数据
    Easyui datagrid 开始时间不能大于结束时间
    用python爬了上千万条招聘信息后,最终分析出python要学这些才能就业...
    用python把B站小姐姐跳舞视频爬下来,并打包成可以直接运行的exe文件
    女朋友股票亏惨了,我一怒之下用Python爬取了证券最新数据...
  • 原文地址:https://www.cnblogs.com/psxfd4/p/11689667.html
Copyright © 2011-2022 走看看