JSONP 理解 和 实例 讲解

1.什么是jsonp

1.1 同源策略

浏览器同源策略的限制,XmlHttpRequest只允许请求当前源(相同域名、协议、端口)的资源。

-1)jsonp只支持get请求

-2)不受同源策略限制 ,兼容性好 不需要XMLHttpRequest(ActiveX)支持,通过js回调函数返回结果

-3)不能解决 不同域的两个页面之间js调用的问题

2. jsonp 原理

动态添加一个script标签,get链接上发送回调函数名称 传给服务器 服务器获取回调函数名称 返回这个函数名称的JS函数(拼装函数) json数据作为函数的实际参数传入 返回的数据是js函数  在前端调用回调函数( json数据传入) 执行回调函数

3.实例

先来说说 服务端应该返回的数据形式 如下所示 用的php  thinphp框架编写的 访问URL 是

http://91hx.xicp.cn:8989/Service/Validata/testJsonP?callback=jsonpCallback callback后面的名字要传给服务器的 后端拼装成一个js回调函数 这样前台json数据就作为回调函数的参数传入 获取到数据了
 public function  testJsonP(){
        $jsonname =I(‘get.callback‘);//获取URL上的callback名称 也就是获取jsonpCallback

        $a = [name=>‘张三‘,sex=>‘男‘,msg=>‘返回成功!‘];// 一个数组数据
       $json = json_encode($a);// 转成json数据

        echo  $jsonname.‘(‘.$json.‘);‘;//正确的格式应该是这样 jsonpCallback({"name":"\u5f20\u4e09","sex":"\u7537","msg":"\u8fd4\u56de\u6210\u529f\uff01"}); 不要忘记分号; 这样返回的才是一个js函数 前台肯定有这个函数名字才行

}

 前台 访问URL http://localhost:63343/H5/jsonP.html 动态添加一个script标签 src里 调用回调函数 jsonpCallback() . ?callback=jsonpCallback名字随便起 后端获取的就是jsonpCallback这个名字而已

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<script type="text/javascript">

    function jsonpCallback(date){
        console.log(date);
        alert(date);
        alert(date.msg);
    }
    var script =document.createElement(‘script‘);
    script.src=‘http://91hx.xicp.cn:8989/Service/Validata/testJsonP?callback=jsonpCallback‘;
    document.body.insertBefore(script,document.body.firstChild);

</script>

</body>
</html>

 我们可以在浏览器里 这里我用的谷歌直接查看 数据是否访问正确 切换到Network标签下 可以看到生成的访问地址 点击然后

 

这下面的图 点击一下左侧链接   切换到Response就可以看到响应的数据了 跟前端写的函数名要一致 里面的json数据就是 那个函数的参数 传入 别忘记有分号;

前端我们已经console.log 数据了 也可以查看 切换到Console标签下

时间: 2024-11-07 18:06:00

JSONP 理解 和 实例 讲解的相关文章

JSONP 含jquery 实例

 前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯和本地数据库功能,又或者通过HTML5的WebSocket也可以实现与服务器的通讯和服务端推功能,但这两种方式都有其局限性,前者需要PhoneGap支持,后者要求用户设备必须支持WebSocket,因此都不能算是ST2的原生解决方案,原生的只有AJAX. 说到AJAX就会不可避免的面临两个

多线程之间的通信实例讲解

                 多线程之间的通信实例讲解对于线程来说,说白了,就是一个函数,如果大家对于这章函数都有理解,那我对于操作系统,线程和进程间的通信会有一个新的认识!接下来我会对每一行代码进行注释,在此过程中,大家也可以对c语言有一个崭新的认识. 第一个函数,创建两个线程. #include <stdio.h>#include <pthread.h>    这个头函数要包含,因为我们后续用的函数都是系统调用,因此需要申请头函数   这样在编译的时候,就可以找到此函数的源

触发器实例讲解

SQL触发器实例讲解(本文是来自百度文库) 备注:本人建了一个站特价汇,我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分享下给大家. 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update , Delete 事件. 我为什么要使用触发器?比如,这么两个表: Create T

SQL触发器实例讲解

定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.       常见的触发器有三种:分别应用于Insert , Update , Delete 事件. 我为什么要使用触发器?比如,这么两个表: Create Table Student(              --学生表         StudentID int primary key,       --学号         ....        )

实例讲解js中的预编译

js作为一本脚本语言,可以不经过编译直接运行,但遇到预编译的问题,尤其是变量或函数同名时,这点知识就尤其必要了.为了更好地了解js语言背后的运行机理.笔者采用实例化的方式讲解我理解的预编译.    理解预编译首先要弄清楚两种概念:函数声明和变量赋值. function ledi(){ }//函数声明 这种形式的写法是函数声明,即声明一个函数,脚本在执行之前会做预编译处理. var ledi= function(){ }//变量赋值   这种写法是变量赋值,函数在js语言里也是一种数据,匿名函数作

[软考]挣值管理EVM详细解释及应用,实例讲解收集(信息系统项目管理师-成本管理)

开场白 由于最近工作很忙,挣值管理这部分早就看完了,就是没有时间整理,今天抽出时间整理好了发出来和大家一起学习.这里要记住英文缩写的意义及公式,注意实例中的问题使用哪个公式来解决,可以自己再多找些练习,熟能生巧. 文章由简入繁,由浅入深,再加上自己的理解,其中难免有纰漏,若路过此处的同行发现错误或有更好的解题思路,请不吝赐教. 挣值管理(Earned ValueManagement,EVM)项目的挣值管理是用与进度计划.成本预算和实际成本相联系的三个独立的变量,进行项目绩效测量的一种方法.它比较

MongDB_CRUD_简单那实例讲解

一,数据操作实例讲解 1,数据查询 NOSql: db.user.find({age:{$gt:20}},{name,age}).limit(5);    查询user集合里面的 大于age>20 的 前五条(limit(5))记录的用户姓名和年龄: 拆分: 1,确认数据库 数据集合 执行操作   db.user.find 2,criteria标准也就是条件    {age:{$gt:20}},{name,age}:我们可以理解为我们执行find函数需要传入参数: 具体参数有两个  一个条件ag

RelativeLayout常用属性介绍及实例讲解

RelativeLayout是一种相对布局,控件的位置是按照相对位置来计算的,后一个控件在什么位置依赖于前一个控件的基本位置,是布局最常用,也是最灵活的一种布局.下边来看一下他的常用属性 这里将这些属性分成组,便于理解和记忆. a).第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:layout_centerInparent 相对于父元素完全居中 an

TCP入门与实例讲解

内容简介 TCP是TCP/IP协议栈的核心组成之一,对开发者来说,学习.掌握TCP非常重要. 本文主要内容包括:什么是TCP,为什么要学习TCP,TCP协议格式,通过实例讲解TCP的生命周期(建立连接.传输数据.断开连接) TCP简介 传输层控制协议(Transport Control Protocol),TCP/IP协议栈的核心之一.位于应用层与网络层之间,提供面向连接的.可靠的字节流服务. 记住关键词"面向连接"."可靠"."字节流",这是学