jsonp实现json数据跨域访问

为什么会出现json数据跨域访问限制?

这是因为所有支持Javascript的浏览器都会使用同源策略这个安全策略。看看百度的解释:

同源策略,它是由netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面一个百度浏览器执行一个脚本的时候会检查这个脚本是属于哪个页面的,即检查是否同源,只有和百度同源的脚本才会被执行。

这就是引起为何取不到数据的原因了,那如何才能解决跨域的问题呢?没错,我们现在可以进入正题,来了解下什么是JSONP了。

JSONP是JSON with Padding的略称。它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

实验json跨域访问的问题

非跨域情况当前项目为(8080端口,访问项目内文件

  <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript" >

   $.ajax({
       url:"http://localhost:8080/cardbatch/test.json",dataType:"json",success:function(data){
           alert(data.message);
       }
  }); 
    
 </script>


test.json文件中的内容

callback({message:"success"});

跨域情况当前项目为(8080端口,访问8081端口文件

  <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript" >

   $.ajax({
       url:"http://localhost:8081/cardbatch/test.json",success:function(data){
           alert(data.message);
       }
  }); 
    
 </script>


可以看到test.json文件的加载在跨域访问时出现错误

解决方式:

  <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript" >
 
   $.ajax({
       url:"http://localhost:8081/cardbatch/test.json",dataType:"jsonp",jsonpCallback:"callback",success:function(data){
           alert(data.message);
       }
  }); 
  </script>


可以看到解决了json跨域问题。

修改一下看看

test.json修改为:

say({message:"sayhi"});
还有ajax调用修改为:
  <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript" >
 
   $.ajax({
       url:"http://localhost:8081/cardbatch/test.json",jsonpCallback:"say",success:function(data){
           alert(data.message);
       }
  }); 
  </script>
可以看出json数据用什么包裹,ajax中jsonpCallback参数就是什么。 下篇文章实现json数据跨域的springmvc通用解决方案。

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...