ajax中的json和jsonp详解
出现的问题:
花了点时间研究ajax中的json和jsonp的原理,这里记录一下。以前一直在使用ajax调用数据,但是从来没有遇到跨域问题,也从来没有注意过json和jsonp的区别,总是一通乱用。但昨天朋友遇到这个问题,让我帮他研究研究。直接上图。
然后我的第一反应当然是去找哪里少一个分号,但是该加分号的位置都加分号了,如图:
这段简单的代码其他位置我都懂,就是dataType这段不懂,我就去百度,百度告诉我,jsonp是用来解决跨域问题的,但是为什么我用了jsonp还是不能呢?我就去研究研究jsonp,看看jsonp到底封装的什么函数。看看它如何实现跨域的。
什么是跨域和同域:
跨域是指程序运行在当前域中去调用其他域,简单的说就是网页在www.baidu.com中打开去获取www.goolg.com中的数据。这是因为浏览器对于javascript的同源策略的限制。
那什么是同域呢? 简单的解释就是相同域名,端口相同,协议相同即为同域。
这个就是同源策略的保护,如果浏览器对javascript没有同源策略的保护,那么一些重要的机密网站将会很危险~
study.cn/json/jsonp/jsonp.html | ||
请求地址 | 形式 | 结果 |
http://study.cn/test/a.html | 同一域名,不同文件夹 | 成功 |
http://study.cn/json/jsonp/jsonp.html | 同一域名,统一文件夹 | 成功 |
http://a.study.cn/json/jsonp/jsonp.html | 不同域名,文件路径相同 | 失败 |
http://study.cn:8080/json/jsonp/jsonp.html | 同一域名,不同端口 | 失败 |
https://study.cn/json/jsonp/jsonp.html | 同一域名,不同协议 | 失败 |
大牛们如何实现跨域的呢?
OK,我知道了跨域是什么了,那么别人是怎么实现跨域的呢?首先我们知道script标签是可以引入别的域中的js代码的,也就是说script是不受跨域限制的。那我们何不像请求js文件去请求数据呢。Talk nonsense and put it down.
PHP代码如下:
这段代码简简单单的实现了用script标签获取PHP中打印的数据,然后用flightHandler函数回调。但是出现了同样的问题,还是说少一个分号,wtfk,怎么会出现这样的问题呢?然后我重新审视一下代码发现了两个问题。
1、flightHandler并没有执行,因为从上面这串代码中根本看不出来是什么地方执行的。
2、PHP文件返回的是json数据,怎么能直接引用呢?
这就好像代码是这样子的:
mmp,你说这样浏览器不会提醒你少一个分号?到这里我已经找到了为什么会少一个分号。so,得出的结论是返回的应该是去执行的js函数,并且这个函数名是flightHandler,传入的参数就是想要获取的数据,这样回调函数才会打印出我们想要的东西。所以我简单的改了一下如下的PHP文件。
然后我就成功跨域获取到数据了。
jsonp如何知道本地回调函数js函数名呢?
那就是将服务端提供的js脚本是动态生成的就行了。
dataType: "jsonp",
jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
然后我在火狐中看到了随机生成的函数名
也就是说我在PHP中返回的执行的js函数名要和这一致,于是我这样修改了一下PHP代码:
ok,到这里就全部完成了,解决的所有疑惑,我也该先我朋友交差了。
ajax中的json和jsonp详解的更多相关文章
- json与jsonp详解
前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域 ...
- JSON和JSONP详解
什么是JSON JSON是一种基于文本的数据交换方式,或者叫做数据描述格式,你是否该选用他首先肯定要关注它所拥有的优点. JSON的优点: 1.基于纯文本,跨平台传递极其简单: 2.Javascrip ...
- ajax、反向ajax、jsonp详解
ajax详解 什么是ajax 其实ajax已经属于老技术了,现在几乎没人不会用了,在这里主要是把底层的东西给大家分享一下,以备应对装逼的面试官. ajax即“Asynchronous Javascri ...
- JAVA中的四种JSON解析方式详解
JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...
- [转]jsonp详解
jsonp详解 json相信大家都用的多,jsonp我就一直没有机会用到,但也经常看到,只知道是“用来跨域的”,一直不知道具体是个什么东西.今天总算搞明白了.下面一步步来搞清楚jsonp是个什么玩意. ...
- jQuery中getJSON跨域原理详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp28 jQuery中getJSON跨域原理详解 前几天我再开发一个叫 河蟹工 ...
- php_DWZ-JUI中碰到的问题解决方法详解(thinkphp+dwz)
原文:php_DWZ-JUI中碰到的问题解决方法详解(thinkphp+dwz) 折腾了两天,dwz删除后,数据不能自动刷新,解决方案,直接看图 . 1. 删除.修改状态后无法刷新记录: 在dwz. ...
- 前端后台以及游戏中使用Google Protocol Buffer详解
前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更 ...
- JS中的函数节流throttle详解和优化
JS中的函数节流throttle详解和优化在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(mousemove),这种事件有一个特点,在一个正常的操作中,有可能在一个短的 ...
随机推荐
- ruby gem的安装步骤
第一步:下载安装文件 官网下载地址:http://rubyinstaller.org/downloads 第二步: 双击安装 在安装的时候,请勾选Add Ruby executables to you ...
- 使用VS进行打包程序解决生成两个文件的问题(压缩后只有一个exe)
使用VS打包创建setup相信大家都挺熟的了,不熟的话网上也有很多,就不做介绍了,现在给大家写下怎么将生成的那些文件夹以及setup.exe和.msi 文件打包成一个exe 我们这里使用的是Winra ...
- node.js在读取文件时中文乱码问题
断更很久了........从今天开始会努力的持续更博,积极学习. 言归正传.今天在写node.js的demo时发现一个bug.我在node中读取本地的text文件时,发现英文的内容可以被读取,但是中文 ...
- 11.2NOIP模拟赛
/* 根右左遍历后最长上升子序列 */ #include<iostream> #include<cstdio> #include<cstring> #include ...
- 【Aizu - 0005 】GCD and LCM
GCD and LCM Descriptions: Write a program which computes the greatest common divisor (GCD) and the l ...
- vultr 购买vps
基本安装转自:https://github.com/uxh/shadowsocks_bash/wiki/Vultr%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B 连接 Vul ...
- [USACO 2012 Jan Silver] Delivery Route【拆点】
传送门:http://www.usaco.org/index.php?page=viewproblem2&cpid=106 这道题还真是完全没思路,真的不知道怎么做,但是看了题解后恍然大悟. ...
- Person p = new Person("zhangsan",20);该句话都做了什么事情?
1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中.2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化.3,在堆内 ...
- vue项目导出电子表格
方法一: 一.安装依赖(前面基本一样) npm install file-saver --save npm install xlsx --save npm install script-loader ...
- Oracle中的表空间
表空间是什么? Oracle数据库包含逻辑结构和物理结构. 数据库的物理结构是指构成数据库的一组操作系统文件. 数据库的逻辑结构是指描述数据组织方式的一组逻辑概念及它们之间的关系. 表空间是数据库数据 ...