JSONP用法

今天用了kendoui 用了网上的js文件,但是请求的是本地数据库,所以两者请求的主机不一样。前端浏览器控制台直接报错。

然后使用了JSONP请求了不同的数据源

首先说明的一点:使用jsonp有可能对你客户端有不安全的因素,存在被盗链的危险。当然,我这里是自己在自己本地项目上做一做玩一玩,其实也没事


先看我为什么要使用jsonp


firstly:

    <script src="https://kendo.cdn.telerik.com/2017.2.621/js/jquery.min.js"></script>
    <script src="https://kendo.cdn.telerik.com/2017.2.621/js/kendo.all.min.js"></script>

我引用了kendoui 的前端框架


secondly:

我请求了本地的数据

 dataSource: {
                    transport: {
                        read: {
                            url: "${base.contextPath}/hr/salary/queryf",
                            type:"GET",
                            dataType:"jsonp",
                            success:function(data){
                                /* var result=JSON.stringify(data);
                                console.log(result); */
                            }
                        }
                    },
                   sort: {
                        field: "year",
                        dir: "asc"
                    }
                },

不熟悉kendoui框架的朋友可能不知道我这里是什么意思。反正其实相当于你使用了ajax 请求了本地数据一样,可以这样理解。

and then:

请看我的controller(我使用了springMVC):


@Controller
@RequestMapping(value="/hr/salary")
public class CompanyProfitController {

    @Autowired
    private CompanyProfitService cps;
    
    @RequestMapping(value="/queryf")
    @ResponseBody
    public void query(HttpServletRequest request,HttpServletResponse response) throws IOException{
        
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        List<CompanyProfit> salary=cps.query();
        //把数据封装成jsonarray
        JSONArray jsona= JSONArray.fromObject(salary);
        //数组转换成string
        String result=jsona.toString();
        
        String callback=request.getParameter("callback");
        //弄成 callback(result) 的形式
        result=callback+"("+result+")";
        response.getWriter().write(result);
        
    }
}


感觉写得比较粗略,我个人的理解是将数据 弄成字符串链,然后通过response相应给客户端,然后客户端解析这个字符串链()

我感觉这个人的博客可以写得很清楚

http://www.cnblogs.com/digdeep/p/4170059.html





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSONP(JSON with Padding)是一种跨域解决方案,它利用了 <script> 标签可以跨域请求资源的特性。使用 JSONP,可以在客户端通过动态创建 <script> 标签来请求跨域资源。 下面是使用 JSONP 的步骤: 1. 在客户端定义一个回调函数,该回调函数用于处理从服务端返回的数据。 ``` function handleData(data) { // 处理从服务端返回的数据 } ``` 2. 创建一个 <script> 标签,将服务端的 URL 作为其 src 属性值,并在 URL 后面添加一个参数名为 callback,其值为刚才定义的回调函数名。 ``` const script = document.createElement('script'); script.src = 'http://example.com/data?callback=handleData'; document.body.appendChild(script); ``` 3. 服务端返回的数据应该是一个函数调用,该函数名为刚才在 URL 中指定的回调函数名,并且该函数的参数应该是需要返回给客户端的数据。 ``` handleData({"name": "John", "age": 30}); ``` 4. 客户端会接收到从服务端返回的数据,并且该数据会作为回调函数 `handleData()` 的参数传入。 注意事项: - 服务端返回的数据必须是一个函数调用,其中函数名是客户端指定的回调函数名。 - JSONP 只支持 GET 请求。 - JSONP 存在安全风险,因为客户端无法确定服务端返回的数据是否可信,服务端也无法确定客户端是否可信。因此,如果使用 JSONP,应该保证服务端返回的数据是安全可信的。 希望以上解释能够帮助您理解 JSONP 的实现方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值