JSONP跨域

JSONP原理及应用

之前的文章中简单介绍过前端可以实现的跨域方式,这次介绍一种更为常用的跨域方式,但这种跨域方式需要服务器端实现。

JSONP意思是填充式JSON,是JSON的一种跨域应用。实现原理是利用HTML script标签可以获取其他域中的JS代码并执行的特性,因此可以利用这一特性来传送数据。

实现方法

JSONP最常见的应用方式是利用回调函数处理跨域数据。

通过在Script标签的src中,以参数的形式把回调函数发送到服务器中

var script = document.creatElement("srcipt");
script.src = "http://....?callback=handleResponse";
document.body.insertBefore(script,document.body.firstChild);

然后在本地声明函数处理获得的响应数据

function handleResponse(response){
    console.log(response);
}

在服务器端中就可以通过url的参数中获取到回调函数名,通过字符串的拼接,把响应数据以参数的形式传入到回调函数中。一并返回给客户端。

如此一来,客户端的script就能获得如下一段代码,并开始执行。

handleResponse(data);

jQuery中实现JSONP

首先介绍下$.ajax的参数

type:请求方式 GET/POST
url:请求地址
async:布尔类型,默认为true 表示请求是否为异步,如果为false表示为同步。
dataType:返回的数据类型
jsonp:传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
jsonpCallback:自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
success:调用成功执行的函数
error:异常处理函数

如上,jQuery中JSONP的实现为

function SendData() {  
    $.ajax({  
        type: "get",  
        async: false,  
        url: "/home/ReturnJson",  
        dataType: "jsonp",  
        jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)  
        jsonpCallback: "receive",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据  
        success: function (data) {  
            alert(data.name);  
        },  
        error: function () {  
            alert('fail');  
        }  
    });  
} 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的...
    西瓜w阅读 5,766评论 0 1
  • 0. 前言 说到AJAX就会不可避免的面临两个问题。 AJAX以何种格式来交换数据? 第二个是跨域的需求如何解决?...
    公子七阅读 23,729评论 7 67
  • 诞生背景: 由于Ajax直接请求普通文件存在跨域无权访问的问题,甭管是静态页面、动态网页、web服务、wcf、只要...
    FTOLsXD阅读 4,781评论 0 1
  • 面试中常常会问到如何使用jsonp跨域(jsonp跨域的原理是什么),这篇文章就给大家介绍一下相关的知识,如有不对...
    webCoder阅读 4,895评论 1 19
  • 什么是同源策略 同源政策(same-origin policy)是指同域名(或ip),同端口,同协议视为同一个域,...
    小囧兔阅读 3,649评论 0 1