关于JSONP的一些易忽略的细节

本人前端渣渣,本文记录的是开始自学时,我自己容易混淆和忽略的细节。。。

1-JSONP,javascript object notation with padding,翻译成中文就是“参数式JSON”、“填充式JSON”。有没有霍然开朗?好多书里翻译成“有填充的JSON”,意思正好相反,害人不浅。

2-JSONP本质就是一个前后端商量好的协议,至今没有被W3C官方认可,但确是当今最流行的跨域手段。W3C官方认可的是CORS。

3-JSONP的原理只有两点:一、动态建立script标签实现异步。二、利用src属性实现跨域。ajax尚且可以实现同步(虽然几乎没有适用场景),但JSONP只能实现异步,因为依据动态建立script标签这一点,使得JSONP想同步都不行。比如下面这段代码:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title></title>
 5 </head>
 6 <body>
 7     <script type="text/javascript">
 8         var scn = document.createElement(‘script‘);
 9         scn.src = ‘a.js‘;
10         document.getElementsByTagName(‘head‘)[0].appendChild(scn);
11         alert(‘b‘);
12     </script>
13 </body>
14 </html>
alert(‘a‘);//a.js

结果先弹出b,在弹出a。加不加async属性都一样。

结论就是:动态添加进去的script标签,无论指定什么,都是异步的,指定同步异步的功能(比如defer/async属性)只对写死到HTML里的标签有效。

依据src属性的在设计之初压根也没有跨域与否的概念,JSONP也可以实现同步。简而言之,JSONP可以用来实现异步跨域、异步同域两种情况。

4-在jQuery里,JSONP被封装在了AJAX中。这一度给刚接触AJAX和JSONP的我带来一个困惑的认识:JSONP是AJAX的子集。当然,这样的认识是错误的。JSONP只是用来弥补AJAX中无法异步跨域的不足,并不是子集。

时间: 2024-10-08 20:31:43

关于JSONP的一些易忽略的细节的相关文章

C语言中容易被忽略的细节(第四篇)

前言:本文的目的是记录C语言中那些容易被忽略的细节.我打算每天抽出一点时间看书整理,坚持下去,今天是第一篇,也许下个月的今天是第二篇,明年的今天又是第几篇呢?--我坚信,好记性不如烂笔头.第四篇了,fight~... 第一篇链接:C语言中容易被忽略的细节(第一篇) 第二篇链接:C语言中容易被忽略的细节(第二篇) 第三篇链接:C语言中容易被忽略的细节(第三篇) 1.void*类型的指针不能参与算术运算,只能进行赋值.比较和sizeof操作的原因? 指针的算术运算还要包含指针所指对象的字节数信息.

C语言中容易被忽略的细节(第二篇)

前言:本文的目的是记录C语言中那些容易被忽略的细节.我打算每天抽出一点时间看书整理,坚持下去,今天是第一篇,也许下个月的今天是第二篇,明年的今天又是第几篇呢?--我坚信,好记性不如烂笔头. 第一篇链接:C语言中容易被忽略的细节(第一篇) 1.C语言中只有一维数组,而且数组的大小必须在编译期就作为一个常数确定下来.C语言中数组元素可以是任何对象,也可以是另外一个数组,即数组的数组. 2.C语言允许初始化列表出现多余的逗号.例如:int days[] = {1,2,3,};作用:方便自动化生成代码.

C语言中容易被忽略的细节(第一篇)

前言:本文的目的是记录C语言中那些容易被忽略的细节.我打算每天抽出一点时间看书整理,坚持下去,今天是第一篇,也许下个月的今天是第二篇,明年的今天又是第几篇呢?--我坚信,好记性不如烂笔头. 1. 在C语言中,符号之间的空白(包括空格符.制表符或换行符)将被忽略.但一个符号的中间不能有空白,否则可能被解释为另一个或几个符号.以下两种写法是等价的: //写法1 if (x > big) big = x; //写法2 if ( x > big ) big = x ; 2.编译器将程序分解为符号的&q

C语言中容易被忽略的细节(第三篇)

前言:本文的目的是记录C语言中那些容易被忽略的细节.我打算每天抽出一点时间看书整理,坚持下去,今天是第一篇,也许下个月的今天是第二篇,明年的今天又是第几篇呢?--我坚信,好记性不如烂笔头.第三篇了,fight~... 第一篇链接:C语言中容易被忽略的细节(第一篇) 第二篇链接:C语言中容易被忽略的细节(第二篇) 1.__attribute__((noreturn)) __attribute__可设置函数属性.变量属性和类型属性.__attribute__((noreturn))设置了函数属性,n

职场中你忽略的细节,都是别人晋升的秘密

作为职场新人,在职场这门学问中,我们都还没有入门,这是我听完曹政老师的知识星球年终福利课<职场的真相>之后的感悟,曹政老师这门课针对的就是我们这样的职场新人,在课中曹政老师讲述了他自己当年在职场中所犯的错误并且指导年轻人该如何在职场中前行,虽然里面的不少观点在曹政老师的很多公众号文章中有提到过,但是经过曹政老师整理和解读之后,收获很多,这两天我也是反复的听,希望自己可以多吸收一点,在职场中走的顺利一些. 职场中不知道你是否跟我一样,有不少费解的地方,比如为什么我的技术明明比他强,但是他晋升的比

Bestinvest集团提醒您短线复盘时你绝对不能忽略的细节!

Bestinvest公司是一家全球领先的私人客户投资集团,致力于严格和公正的金融投资研究,持续不懈地专注于为客户提供卓越的服务,具有最高的专业水平. 为什么要复盘复盘是所有交易的基本,各种交易技术之所以有效,都是前人透过无数的复盘统计而得出的结论,那为什么不直接使用这些技术就好,还要自己花时间心力复盘?许多交易者往往会一昧的听信所谓的「高手」的技术,而懒得复盘,殊不知这是交易的致命伤!其一是人家认定的信号跟你自己认定的信号可能差异巨大,再来就是这些信号没有经过你亲自的复盘检测,你对自己的交易就没

Java中容易被你忽略的细节(一)

1.在一个程序当中代码段访问了同一个对象从单独的并发的线程当中,那么这个代码段叫"临界区" 怎么解决呢:使用同步的机制对临界区进行保护 同步的两种方式:同步块和同步方法 对于同步来说都是使用synchronized方法 每一个对象都有一个监视器,或者叫做锁. java用监视器机制实现了进程之间的异步执行 2.Struts框架基于MVC模式 Struts的工作流程: 在web应用启动时就会加载初始化ActionServlet,ActionServlet从 struts-config.xm

strcpy和strcat易忽略点

首先来看一段C程序: 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 void GetMem(char*& pstr){//注意必须要用指针的指针或者指针的引用.如果传本身,返回的已经是空悬指针了 6 pstr=(char*)malloc(20); 7 } 8 9 int main(){ 10 char* str; 11 GetMem(str); 12 13 strcpy(

最易忽略的东东:iptables和selinux

在平常搭建环境中,最容易遗忘iptables和selinux,以至于环境测试失败,相信有很多和我一样的遭遇的吧.好了,本文就说下这两个的日常用法. 1.清空防火墙的命令: [[email protected] ~]# iptables -F 2.selinux的用法: (1)永久生效---需要重启服务器 [[email protected] ~]# vim /etc/selinux/config SELINUX=enforcing/disabled         *开启或关闭* [[email