跨域请求之JSONP

跨域恳求的方法有很多种,

1,iframe

2,document.domain

3,window.name

4,script

5,XDomainRequest (IE8+)

6,XMLHTTPRequest (Firefox3.5+)

7,postMessage (HTML5)

8,后台代理

...

它们有各自的优缺点,回来的数据格局也各不同,应根据需要慎重挑选。比方iframe回来html片段就对比适合,费老劲用它回来JSON就因小失大了。这篇开端我将打造一个有用的跨域恳求东西Sjax。运用script恳求的最大缺点,挑战是过错处理。比方404过错,它不象XMLHTTPRequest能精确的回来状况码404。我把这个放在最终一篇。

本系列首要描绘以上列举的方法4,即通过script回来JSON格局数据数据。这种方法如今称为JSONP。JSON是目前前后台交流运用最盛行,也最广泛的格局之一。相对于前期的AJAX回来XML(AJAX中的X即是XML),JSON显得更轻量级,没有剩余的Tag符号,解析也是原生的。XML回来到前端后先转成文档,通过DOM API一层层的解析。解析DOM是开支对比大的,尤其在前期的IE版别中(IE6/7/8),core js与dom交流的价值是很大的。

JSONP的实现思路很简单

1, 前端创立script符号,设置src,添加到head中(你可以往body中添加)。

2, 后台回来一个js变量jsonp,这个jsonp即是恳求后的JSON数据。

3, 回调完成后删去script符号(还有一些整理作业如防止有些浏览器内存泄露等)。

接口

Sjax.load(

url,// 跨过恳求的URL

success, // 回调函数,有必要界说一个形参,用于接纳后台回来的全局变量jsonp (约好后台回来如jsonp = {...}结构)

timestamp,// 传true会加一个时间戳,防止缓存,默许不加

);

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-8">

<title>sjax_0.1.js by snandy</title>

<script src="/js/sjax_0.1.js"></script>

</head>

<body>

<p id="p1" style="background:gold;"></p>

<input type="button" value="Get Name" onclick="clk()"/>

<script type="text/javascript">

function clk(){

Sjax.load(

http://lf.yunnanw.cn/‘,

http://www.lcsyt.com/‘,

http://www.minnan888.net/‘,

http://www.vipfuxin.com/‘,

http://www.qclchina.com/‘,

http://www.tongxinglong.com/‘,

http://www.jinanwuliangye.com/‘,

‘‘,

function(){

document.getElementById(‘p1‘).innerHTML = ‘Hi, ‘ + jsonp.name;

}

);

}

</script>

</body>

</html>

跨域请求之JSONP,布布扣,bubuko.com

时间: 2024-12-25 05:27:02

跨域请求之JSONP的相关文章

跨域请求:JSONP

在JavaScript中,有一个很重要的安全性限制,被称为"同源策略".即JavaScript只能访问与包含它的文档在同一域下的内容.然而,当进行一些比较深入的前端编程的时候,不可避免地需要进行跨域操作,这时候“同源策略”就显得过于苛刻.JSONP跨域请求是一个常用的解决方案. JSONP:<script>元素可以作为一种Ajax传输机制,只须设置<script>元素的src属性(假如它还没有插入到document中,需要插入进去),然后浏览器就会发送一个HTT

js跨域请求方式 ---- JSONP原理解析

这篇文章主要介绍了js跨域请求的5中解决方式的相关资料,需要的朋友可以参考下 跨域请求数据解决方案主要有如下解决方法: 1 2 3 4 5 JSONP方式 表单POST方式 服务器代理 Html5的XDomainRequest Flash request 分开说明: 一.JSONP: 直观的理解: 就是在客户端动态注册一个函数 function a(data),然后将函数名传到服务器,服务器返回一个a({/*json*/})到客户端运行,这样就调用客户端的 function a(data),从而

Ajax+Spring MVC实现跨域请求(JSONP)JSONP 跨域

JSONP原理及实现 接下来,来实际模拟一个跨域请求的解决方案.后端为Spring MVC架构的,前端则通过Ajax进行跨域访问. 1.首先客户端需要注册一个callback(服务端通过该callback(jsonp)可以得到js函数名(jsonpCallback)),然后以JavaScript语 法的方式,生成一个function 2.接下来,将JSON数据直接以入参的方式,放置到function中,这样就生成了一段js语法文档,返回给客户端. 3.最后客户端浏览器动态的解析script标签,

Ajax+Spring MVC实现跨域请求(JSONP)

JSONP解释 在解释JSONP之前,我们需要了解下"同源策略"这个概念,这对理解跨域有帮助.基于安全的原因,浏览器是存在同源策略机制的,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载额文档的属性.有点绕,说的简单点就是浏览器限制脚本只能和同协议.同域名.同端口的脚本进行交互. JSONP就是为了解决这一问题的,JSONP是英文JSON with Padding的缩写,是一个非官方的协议.他允许服务端生成script tags返回值客户端,通过javascript call

Ajax跨域请求解决方案——jsonp

转自:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 1.一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面.动态网页.web服务.WCF,只要是跨域请求,一律不准: 2.不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>.<im

ajax跨域请求获取jsonp数据

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><script src="jquery.js"></script><script type="text/javascript">function getIntface(){ //?

ajax 跨域请求之jsonp

需求 遇到的问题 解决办法 需求 今天项目需要访问一个外部链接获取数据,是跨域的.使用ajax 请求一直提示: 遇到的问题 1. 如何使用ajax 跨域请求数据 2. 能不能post请求 解决办法 经过网上查找资料,能使用jsonp请求跨域数据. jsonp请求数据只能get,不支持post跨域请求 使用方法,见代码: $.ajax({ type: "post",//这里写post也没用,也是get请求 url: "url", dataType: "jso

Ajax+Spring MVC实现跨域请求(JSONP)(转)

背景: AJAX向后台(springmvc)发送请求,报错:已阻止交叉源请求:同源策略不允许读取 http://127.0.0.1:8080/DevInfoWeb/getJsonp 上的远程资源.可 以将资源移动到相同的域名上或者启用 CORS 来解决这个问题. 百度一下,发现是遇到了跨域请求请求问题.搜集资料如下 JSONP解释 在解释JSONP之前,我们需要了解下"同源策略"这个概念,这对理解跨域有帮助.基于安全的原因,浏览器是存在同源策略机制的,同源策略阻止从一个源加载的文档或脚

跨域请求之jsonp的实现方式

ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域. 1 (function(){ 2 $jsonp(//地址 3 'http://api.douban.com/v2/movie/in_theaters', 4 //传递的参数 5 { 6 count:10,start:5 7 }, 8 //回调函数 9 functio