JSONP跨域请求

 更新时间:2017年03月02日 14:13:18   作者:小禾点点  
本文主要介绍了jsonp跨域请求的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧

什么是跨域:

1、域名不同

2、域名相同端口不同

js出于对安全考虑不支持跨域请求。我们可以使用JSONP解决跨域问题。

一、JSONP是什么

JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页js是无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。

原理:浏览器在js请求中,是允许通过script标签的src跨域请求,可以在请求的结果中添加回调方法名,在请求页面中定义方法,既可获取到跨域请求的数据。(js请求的不是一个单纯的json数据而是一段包含json数据的js脚本)

二、模拟JSONP

服务器域名:http://localhost:8081/rest/itemcat/list

客户端服务器:http://localhost:8082/test.html

1、普通的JS跨域请求

服务器数据:

客户端请求代码:

$(function(){
  $.ajax(    {url: "http://localhost:8081/rest/itemcat/list?callback=myFunction", 
     success: function(data){
      console.info(data)
   }}); 
 });

结果

XMLHttpRequest cannot load http://localhost:8081/rest/itemcat/list?callback=myFunction. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8082' is therefore not allowed access.

2、模拟JSONP请求

客户端请求代码:

$(function(){
  greateScript("http://localhost:8081/rest/itemcat/list");
  function greateScript(src) {
   $("<script><//script>").attr("src", src).appendTo("body")
  } 
 });

结果:

list?_=1488425374097:1 Uncaught SyntaxError: Unexpected token :

三、使用JSONP

环境:

服务器域名:http://localhost:8081/rest/itemcat/list

客户端服务器:http://localhost:8082/test.html

服务端代码(本人使用springmvc4):

@RequestMapping("/itemcat/list")
 @ResponseBody
 public Object getItemCatList(String callback) {
  CatResult catResult = itemCatService.getItemCatList();
  MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(catResult);
  //设置JSONP回调函数
  mappingJacksonValue.setJsonpFunction(callback);
  return mappingJacksonValue;
 }

客户端调用代码:

$(function(){
  $.ajax(
   { url: "http://localhost:8081/rest/itemcat/list", 
    dataType: "jsonp",
    jsonp: "callback",
    success: function(data){
    console.info(data)
   }}); 
 });

结果:

看返回结果可以发现返回的数据不是一段单纯的json数据,而是一段js函数。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • 基于JS实现无缝滚动思路及代码分享

    基于JS实现无缝滚动思路及代码分享

    无缝滚动效果在各大网站都有这样的需求,应用非常广泛,下面小编给大家分享基于JS实现无缝滚动思路及代码,非常不错具有参考借鉴价值,感兴趣的朋友一起看下吧
    2016-06-06
  • javascript实现前端分页效果

    javascript实现前端分页效果

    这篇文章主要为大家详细介绍了javascript实现前端分页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • tracking.js页面人脸识别插件使用方法

    tracking.js页面人脸识别插件使用方法

    这篇文章主要为大家详细介绍了tracking.js页面识别人脸插件使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 用JS写的一个TableView控件代码

    用JS写的一个TableView控件代码

    JS写的一个TableView控件代码,方便输出表格。
    2010-01-01
  • js实现星星闪特效

    js实现星星闪特效

    这篇文章主要为大家详细介绍了js实现星星闪特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • JavaScript下拉菜单功能实例代码

    JavaScript下拉菜单功能实例代码

    这篇文章主要介绍了JavaScript下拉菜单实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • JavaScript实现向右伸出的多级网页菜单效果

    JavaScript实现向右伸出的多级网页菜单效果

    这篇文章主要介绍了JavaScript实现向右伸出的多级网页菜单效果,通过javascript调用页面元素属性的动态改变实现向右展开菜单效果,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • canvas 画布在主流浏览器中的尺寸限制详细介绍

    canvas 画布在主流浏览器中的尺寸限制详细介绍

    这篇文章主要介绍了canvas 画布在主流浏览器中的尺寸限制详细介绍的相关资料,canvas在不同浏览器下面有不同的最大尺寸限制,这里测试下,需要的朋友可以参考下
    2016-12-12
  • WebApi+Bootstrap+KnockoutJs打造单页面程序

    WebApi+Bootstrap+KnockoutJs打造单页面程序

    这篇文章主要介绍了WebApi+Bootstrap+KnockoutJs打造单页面程序的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 详解Javascript中prototype属性(推荐)

    详解Javascript中prototype属性(推荐)

    这篇文章主要介绍了Javascript中prototype属性的相关资料,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09

最新评论