/*
* 跨站数据请求哪家强——青出于蓝的jsonp数据格式
* @author gj
* @date 2017-09-15
*/

先哲有云“青,取之于蓝,而青于蓝;冰,水为之,而寒于水”大抵人们用这句来描述1.0版本很牛逼2.0版本也不怂。本文所牵涉的json与jsonp两者的关系大概如此(仅限前端领域)。

使用背景

出于产品的要求要将两个项目的数据进行交互,即A站web页面要获取B站的实时数据。当然做个数据接收发送接口文件也可以,但考虑到项目的独立性与维护成本决定还是以前端技术来处理此需求。前端数据交互的格式就那几种,其中json格式以轻巧的外观,优秀的兼容性为程序猿们所喜闻乐见。但av8d都知道Ajax直接请求站外数据、文件存在跨域的访问的问题,这就尴尬了。此诚危急存亡之秋也!然忽闻一声炮响,五阵中金鼓乱鸣,旌旗齐展,一位少年纵骑奔出,人似虎,马如龙,正是Jsonp!!!

What is the jsonp?

以下内容来自百度百科(^_^)。

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

How to use the jsonp?

此带码段以jQueryo为背景框架:

jQuery.ajax({
url:"http://xxx.com/index.php?app=wap&mod=Live&act=LiverListAll",
type:"GET",
dataType:"jsonp",//注意这里有个p!!
jsonp:"jsoncallback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名
success:function(result){
if(result.live_status == 1){
var live_str;
for(i in result.live_list){
alert(result.live_list[i].title) ;
//alert(result.live_list[i].title);
} }
},
error:function(){
}
})

服务端返回数据也要进行一些改动,这里以PHP 语言为例:

echo $_GET['jsoncallback'] . "(".json_encode($return_data).")";//此用的$_GET['jsoncallback'] 与上面前端代码中的jsonp:"jsoncallback"相对应。

大功能告成,如此就可以完成前端数据的跨域传输问题。

PS:

其实jsonp从严格意义上来说并不属于一种数据格式,上面代码中的dataType:"jsonp"让人以为这是隶属于ajax的一种数据格式,其实不然,只是jquery框架把jsonp扩展到了ajax的相关处理逻辑中了。jsonp的核心是动态生成<script>标签来提供数据源,因为script标签是不存在跨域问题的。而ajax的原理XMLHttpRequest。

 

跨站数据请求哪家强——青出于蓝的jsonp的更多相关文章

  1. web攻击之二:CSRF跨站域请求伪造

    CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...

  2. 防御CSRF的方法有哪些(一) HTTP 头中自定义属性并验证 CSRF跨站域请求伪造攻击

    CSRF (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下 ...

  3. CSRF(Cross Site Request Forgery, 跨站域请求伪造)

    CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的 ...

  4. 第二百七十一节,Tornado框架-CSRF防止跨站post请求伪造

    Tornado框架-CSRF防止跨站post请求伪造 CSRF是什么 CSRF是用来在post请求时做请求验证的,防止跨站post请求伪造 当用户访问一个表单页面时,会自动在表单添加一个隐藏的inpu ...

  5. 转: CSRF(Cross Site Request Forgery 跨站域请求伪造) 背景与介绍

    from:  https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/   在 IBM Bluemix 云平台上开发并部署您的下一个应用 ...

  6. Web安全之跨站伪造请求(CSRF)

    CSRF简介 CSRF全称跨站伪造请求(Cross-site request forgery)也称为one click attack/session riding,还可以缩写为XSRF 通俗说就是利用 ...

  7. [oldboy-django][4python面试]有关csrf跨站伪造请求攻击

    1 csrf定义 - csrf定义:Cross Site Request Forgery,跨站请求伪造 举例来说: 网站A伪造了一个图片链接: <a href="http://www. ...

  8. 用shell脚本批量进行xss跨站攻击请求

    由于执行的xss攻击请求他多了,初步估计要执行83次,而且还要执行3篇,如果手工一个一个去执行,说出去,我还配叫自动化大师吗: 有鉴于此,边打算自己编写一个脚本进行批量执行: 而短脚本的编写,非she ...

  9. CSRF跨站伪造请求

    一.什么是CSRF CSRF(Cross Site Request Forgery) 跨站请求伪造.也被称为One Click Attack和Session Riding,通常缩写为CSRF或XSRF ...

随机推荐

  1. Failed resolution of: Landroid/support/v7/internal/widget/TintManager;

    碰到这个问题,一般都是build.gradle中导入的包不匹配的问题,如TabLayout与ViewPager搭配使用的时候,必须保持导入包的版本一致 compile 'com.android.sup ...

  2. 安卓开发中SQLite的使用(附实例)

    在Android平台上系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取.下面以我自己创建的收入信息表(InAccount)为例,来学习SQLite的使用. 主要是四个 ...

  3. 再学python类(终结篇)

    续写 初学python类,这几天吃坏东西了,拖着虚弱的身躯写的.有些乱请各位看官海涵. 声明:本人编程新手,还在学习中.所表述的东西都是基础语法之类的,分享我的学习笔记.还望多多指点,我一定虚心接受. ...

  4. JavaScript中Null和undefind区别

    公众号原文 Javascript有5种基本类型:Boolean,Number,Null,Undefined,String:和一种复杂类型:Object(对象): undefined:只有一个值,及特殊 ...

  5. Microsoft Edge 浏览器远程代码执行漏洞POC及细节(CVE-2017-8641)

    2017年8月8日,CVE官网公布了CVE-2017-8641,在其网上的描述为: 意思是说,黑客可以通过在网页中嵌入恶意构造的javascript代码,使得微软的浏览器(如Edege),在打开这个网 ...

  6. WPF控制动画开始、停止、暂停和恢复

    1.闲言 好久也没更新一博客了,自己有点发懒,同时确实这几个月来也有点忙.风机监测软件,项目中,有这样一个小需求:正常风机在旋转的时候,上位机软要做一个风机的图片,让它不停地旋转,一但检测到下面风机停 ...

  7. 解决mybatis空字段null字段不返回

    Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),则Mybatis在映射的时候,不会映射这个字段,例如 查询 name,sex,age,数据库中的 ...

  8. Swagger

    Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务 http://swagger.io/

  9. Redis笔记——技术点汇总

    目录 · 特点 · 安装 · 数据库 · 服务器命令 · 数据类型及其操作命令 · 数据结构 · string · list · set · hash · zset · 发布与订阅 · 排序 · 事务 ...

  10. windbg内存查看(d*)

    d*命令 d{a|b|c|d|D|f|p|q|u|w|W} Address [/c ColumuWidth] [l Length] Address:查看address地址处的内存. ColumnWid ...