深入理解jsonp跨域请求原理

在进行网站开发的过程中经常会用到第三方的数据,但是由于同源策略的限制导致ajax不能发送请求,因此也无法获得数据。解决ajax的跨域问题有两种方法:

  一、jsop  

  二、XMLHttpRequest2中可以配合服务端来解决,在响应头中加入Access-Control-Allow-Origin:*

1、同源:

  同源策略是浏览器的一种安全策略,所谓同源是指,域名,协议,端口号完全相同
  1.1目的:保护用户信息安全
  1.2限制:cookie、localStorage和IndexDB无法读取
  无法操作跨域的iframe里的dom元素
  ajax请求不能发送

2、跨域:

不同源则为跨域

1      http://api.example.com/detail.html  不同源 域名不同
2      https//www.example.com/detail.html   不同源 协议不同
3      http://www.example.com:8080/detail.html    不同源    端口不同
4      http://api.example.com:8080/detail.html    不同源    域名、端口不同
5      https://api.example.com/detail.html    不同源    协议、域名不同
6      https://www.example.com:8080/detail.html    不同源    端口、协议不同
7      http://www.example.com/detail/index.html    同源    只是目录不同  

3、jsonp原理:

其本质是利用了标签具有可跨域的特性,由服务端返回预先定义好的javascript函数的调用,并且将服务端数据以该函数参数的形式传递过来。

1  <script>
2        function fuc(data){
3          console.log(data.name);
4         }
5      </script>
6      <script src="http://www.baidu.com/api.php?callback=fuc"></script>    

4、后台代码

1 <?php
2     $cb = $_GET[‘callback‘];
3     $data = array(
4                 ‘name‘=> ‘zs‘,
5                 ‘age‘=>18,
6                 ‘gender‘=>true
7             );
8     echo $cb.‘(‘.json_encode($data).‘)‘;
9 ?>    

案例:利用jsonp访问百度天气

 1   $(function () {
 2         // 发送jsonp请求
 3         $.ajax({
 4             type:"get",
 5             url:‘http://api.map.baidu.com/telematics/v3/weather?output=json&ak=0A5bc3c4fb543c8f9bc54b77bc155724‘,
 6             data:{
 7                 location:$("#city").val()||"上海"
 8             },
 9             dataType:"jsonp",
10             success: function (data) {
11                 //渲染模版
12                 var html = template(‘template‘,{list:data.results[0].weather_data})
13                 $(‘tbody‘).html(html);
14
15             }
16         });
17     });

  使用template加载数据

<script type="text/template" id="template">
      <% for(var i=0 ; i< list.length ;i++){ %>
          <tr>
          <% var item = list[i]; %>
          <td><%=item.date%></td>
          <td><img src="<%=item.dayPictureUrl%>" /></td>
          <td><img src="<%=item.nightPictureUrl%>" /></td>
          <td><%=item.temperature%></td>
          <td><%=item.weather%></td>
          <td><%=item.wind%></td>
          </tr>
       <%}%>
</script>

  效果图:

时间: 2024-10-05 06:16:40

深入理解jsonp跨域请求原理的相关文章

.net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器

1.WebForm使用母版页后执行的顺序是先执行子页面中的Page_Load,再执行母版页中的Page_Load,请求是先生成母版页的控件树,然后将子页面生成的控件树填充到母版页中,最后输出 2.WebForm使用母版页进行登录时候的验证 //新建一个页面父类 public abstract class BasePage:Page { protected void Page_Load(object sender, EventArgs e) { //1.身份验证的方法 Session if (Se

前端跨域请求原理及实践

前端跨域请求原理及实践 2017-03-03 前端大全 (点击上方公众号,可快速关注) 作者:高鹏 tingandpeng.com/2016/09/05/前端跨域请求原理及实践/ 如有好文章投稿,请点击 → 这里了解详情 一. 跨域请求的含义 浏览器的同源策略,出于防范跨站脚本的攻击,禁止客户端脚本(如 JavaScript)对不同域的服务进行跨站调用. 一般的,只要网站的 协议名protocol. 主机host. 端口号port 这三个中的任意一个不同,网站间的数据请求与传输便构成了跨域调用.

JSONP跨域的原理解析

JSONP跨域的原理解析 一种脚本注入行为 在 2011年10月27日 那天写的     已经有 99238 次阅读了 感谢 参考或原文 JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为"Same-Origin Policy"(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进

【转】JSONP跨域的原理解析

JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进行多iframe或多窗口编程.以及Ajax编程时显得尤为重要.根据这个策略,在baidu.com下的页面中包含的JavaScript代码,不能访问在

jsonp跨域的原理

1. 前言 jsonp是一种常用的跨域手段,和反向代理,服务端做跨域处理相比,jsonp更显得方便轻巧,因而被大量用来处理跨域的请求,那么,这种请求方式到底是用了什么黑魔法,来解决令我们头疼的跨域问题. 2. 原理 jsonp其实并没有用到什么黑魔法,能达到跨域这种效果,无非是利用script标签自身的跨域能力.我们知道,img,script,这种标签如果有相应的src,那么便会发起一个htttp请求来请求相应的资源,如果有script标签对应的路径是一个js文件,那么在下载完毕这个js之后会马

JSONP跨域的原理解析及其实现介绍

JSONP 即 Json padding ,JSONP跨域GET请求是一个常用的解决方案,下面我们来看一下JSONP跨域是如何实现的,并且探讨下JSONP跨域的原理 JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为“Same- Origin Policy”(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档 在同一域下的内容. JavaScr

JSONP跨域的原理解析( 一种脚本注入行为)

JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制, 被称为“some-Origin Policy”(同源策略).这一策略对于JavaScript代码能够访问的页面内容作了很重要的限制, 即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进行多Iframe或多窗口编程.以及Ajax编程时显得尤为重要.根据这个策略,在baidu.com 下的页面中包含的JavaScript的代码,不

JSONP跨域的原理解析(转)

JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为"Same-Origin Policy"(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进行多iframe或多窗口编程.以及Ajax编程时显得尤为重要.根据这个策略,在baidu.com下的页面中包含的JavaScript代码,

[转载]JSONP跨域的原理解析

JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进行多iframe或多窗口编程.以及Ajax编程时显得尤为重要.根据这个策略,在baidu.com下的页面中包含的JavaScript代码,不能访问在