哲学原理学学 jsonp

by admin on 2018年12月19日

哲学原理 1

1.1 简介

C++ 融合了3负不同之编程格局:

  • C语言代表的过程性语言
  • 类似代表的面向对象语言
  • C++模板代表的泛型编程

1.起因

js脚本举办ajax异步调用的上,直接求普通文书是跨域无权力访问的题材,不管你是静态页面、动态网页、web服务,只固然跨域请求,都不能成功;

要达到句话没了然,我们从来看例子。有三三两两独一样的品类,一个webApp01,一个webApp02,分别在点滴单tomcat里启动,一个端口是8080,一个端口是9080。即有限只访问地址是

http://localhost:8080/webApp01/
http://localhost:9080/webApp02/

种布局也特别粗略。

哲学原理 2

 

webApp01中的index.jsp的代码如下:

 1 <html>
 2 <script type="text/javascript" src="http://localhost:8080/webApp01/jquery-1.11.1.js"></script>
 3 <body>
 4 <script type="text/javascript">
 5 $(function (){
 6     $("#getOtherDomainThings").click(function () {
 7         
 8         $.get("http://localhost:8080/webApp01/jquery-1.11.1.js", function (data) {
 9             
10             alert(data);
11         })
12     })
13 })
14 </script>
15 <h2>Hello World!</h2>
16 <input type="button" value="submit" id="getOtherDomainThings"/>
17 </body>
18 </html>

当大家访问http://localhost:8080/webApp01/并单击submit按钮后,看到jquery的脚本成功获取到了,如下图

哲学原理 3

但当我们反一下代码,要异步获取之公文未以和一个域下会时有暴发什么?index.jsp代码改化如下所示

 1 <html>
 2 <script type="text/javascript" src="http://localhost:8080/webApp01/jquery-1.11.1.js"></script>
 3 <body>
 4 <script type="text/javascript">
 5 $(function (){
 6     $("#getOtherDomainThings").click(function () {
 7         $.get("http://localhost:9080/webApp02/jquery-1.11.1.js", function (data) {
 8             
 9             alert(data);
10         })
11     })
12 })
13 </script>
14 <h2>Hello World!</h2>
15 <input type="button" value="subbmit" id="getOtherDomainThings"/>
16 </body>
17 </html>

我们刷新一下http://localhost:8080/webApp01/并单击submit按钮后,看到jquery的脚本获取失败,如下图

 

哲学原理 4

扣押下了吧,这便是js脚本做ajax异步调用的时,直接求普通文书是跨域无权力访问的题材。请求压根就是从未作下。

 

1.2 简史

2.缓解办法

   
最简便的法自是为异步请求的数目在同一个域下了。可是伟大的攻城师找到了其它方--jsonp。

jsonp的原理分外粗略,即便ajax不能跨域请求,不过有有src标签的要素都可以跨域请求,比
img、iframe、script等。

1.2.2 C语言

时间 地点 人物 目的
20世纪70年代早期 贝尔实验室 Dennis Ritchie(丹尼斯·里奇 ) 开发一种将低级语言的效率、硬件访问能力和高级语言的通用性、可移植性融合一起的语言用于开发UNIX操作系统

2.1.JSONP和JSON关系

    JSON(JavaScript Object Notation)
是均等栽轻量级的数据交流格式。这么些地点(json.org)可以学学json。

    JSONP是JSON with
Padding的有点称。它是一个黑的磋商,它同目的在于劳动器端集成Script
tags重回至客户端,通过javascript
callback的款式落实跨域访问(这仅是JSONP简单的贯彻形式)。

1.2.2 C语言编程原理

  1. 程序=数据+算法
  2. 过程性语言强调编程的算法方面
  3. 结构化编程(structured
    programming)解决语句协会混乱的题材,C中利用for循环、while循环、do
    while循环和if else语句
  4. 自从到向下(top-down)的宏图,大任务分解变成小任务

2.2.实现-无格式json

大家继承改造我们的index.jsp的代码

 1 <html>
 2 <script type="text/javascript" src="http://localhost:8080/webApp01/jquery-1.11.1.js"></script>
 3 <body>
 4 <script type="text/javascript">
 5 $(function (){
 6     $("#getOtherDomainThings").click(function () {
 7         $.getJSON("http://localhost:9080/webApp02/jquery-1.11.1.js?callback=?", function (data) {
 8             
 9             alert(data);
10         })
11     })
12 })
13 </script>
14 <h2>Hello World!</h2>
15 <input type="button" value="subbmit" id="getOtherDomainThings"/>
16 </body>
17 </html>

咱俩刷新http://localhost:8080/webApp01/并单击submit按钮后,看到jquery的脚本成功获取到了,如下图

哲学原理 5

 等等,好像有些不投缘,alert指示窗口没弹出来,而且要的文书地方全称是http://localhost:9080/webApp02/jquery-1.11.1.js?callback=jQuery1111049328906112350523_1410439234844&_=1410439234845 。

我们以一个新浏览器窗口打开这些链接是尚未问题之(当然也无汇合发出什么问题,这都休干到跨域的题材了)。

本这种跨域请求只可以回去json格式的数目,假而大家拿这webApp2上之jquery-1.11.1.js文件内容改动化这法

1 {"name":"qyf404","age":123}

大家重新刷新浏览器访http://localhost:8080/webApp01/并单击submit按钮后,看到jquery的脚本成功获取到了,如下图

哲学原理 6

结果和事先的无分别,怎么回事?查了下资料,原来jsonp重回的json文本是出格式要求的。

1.2.3 面向对象编程

  1. OOP强调的凡数码,理念是统筹与问题之真面目特征相呼应的数据结构(即类)
  2. OOP程序设计方首先设计类,这种从低级社团(如类)到高档协会(如程序)的处理过程就是自下向上(bottom-up)的编程
  3. OOP的外新见解:音信隐藏、多态、继承

2.3.实现-有格式json

俺们于webApp02项目蒙创制一个test.jsp,内容如下

1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2     pageEncoding="UTF-8"%>
3 <%
4 String callback = request.getParameter("callback");  
5 out.print(callback+"({ name:'qyf404',age:'27'});");  
6 7  %>

咱拿webApp01的index.jsp的代码改造一下,如下

 1 <html>
 2 <script type="text/javascript" src="http://localhost:8080/webApp01/jquery-1.11.1.js"></script>
 3 <body>
 4 <script type="text/javascript">
 5 $(function (){
 6     $("#getOtherDomainThings").click(function () {
 7         $.getJSON("http://localhost:9080/webApp02/test.jsp?callback=?", function (data) {
 8             
 9             alert("name=" + data.name + ",age=" + data.age);
10         });
11     });
12 })
13 </script>
14 <h2>Hello World!</h2>
15 <input type="button" value="subbmit" id="getOtherDomainThings"/>
16 </body>
17 </html>

俺们又刷新浏览器访http://localhost:8080/webApp01/并单击submit按钮后,看到jquery的脚本成功获取到了,而且json的内容也传过来了,如下图

哲学原理 7

不世之功告成。等等,还有一个题目?异步请求多数汇合带来参数,有参数怎么处理?

1.2.4 C++和泛型编程

  1. 泛型编程(generic programming)强调独立于特定的数据类型
  2. 单单修一个泛型函数,并以这些用于各样数码列
  3. C++ 模板提供了这种体制

2.4落实-有参数有格式json

被我们继续改造webApp01的index.jsp,追加请求参数,代码如下

 1 <html>
 2 <script type="text/javascript" src="http://localhost:8080/webApp01/jquery-1.11.1.js"></script>
 3 <body>
 4 <script type="text/javascript">
 5 $(function (){
 6     $("#getOtherDomainThings").click(function () {
 7         $.getJSON("http://localhost:9080/webApp02/test.jsp?user=qyf404&callback=?", function (data) {
 8             alert("name=" + data.name + ",age=" + data.age);
 9         });
10     });
11 })
12 </script>
13 <h2>Hello World!</h2>
14 <input type="button" value="subbmit" id="getOtherDomainThings"/>
15 </body>
16 </html>

连续改造webApp02的test.jsp页面,代码如下

1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2     pageEncoding="UTF-8"%>
3 <%
4 
5 String name = request.getParameter("user");
6 String callback = request.getParameter("callback");  
7 out.print(callback+"({ name:'"+name+"',age:'27'});");  
8 
9  %>

咱俩再一次刷新浏览器访http://localhost:8080/webApp01/并单击submit按钮后,看到jquery的脚本成功获取到了,而且json的内容也传过来了,如下图

哲学原理 8

不曾问题,好用之不得了。

 

末给我们看test.jsp到底再次回到了一个什么神奇的东东

jQuery111102533256879542023_1410490196678({ name:'qyf404',age:'27'});

 原来test.jsp是回了一个方可以地头执行之js脚本。不过者法名jQuery111102533256879542023_1410490196678凡是jQuwey自动生成的。

 

演示代码下载

 

1.2.5 C++ 的起源

时间 地点 人物 目的
20世纪80年代 贝尔实验室 Bjarne Stroustrup(比雅尼·斯特劳斯特鲁普) “更方便地编写出好程序,让每个程序员更加快乐”
  1. C++ 是C语言的超集,任何有效之C程序都是行得通的C++程序
  2. 号C++来自C语言中的递增运算符++,这声明她是C的增添版本
  3. OOP部分与C++将题目关系的概念联系起的实力,C部分则与C++紧密联系硬件的力量
  4. 在C++得到肯定水平成功后,Stroustrup才添加了模版,使得泛型编程成为可能

1.3 可移植性和标准

可移植性存在个别单障碍:

障碍 解决方案
硬件差异 将依赖于硬件的部分放到函数模块中,最大限度地降低可移植性问题
语言差异 制定C++语言标准,ANSI/ISO联合组织

C++国际标准之路:

标准 发布时间 特性
C++98 1998 描述C++已有特性;添加了异常、RTTI和STL
C++03 2003 修订错误、减少多义性
C++11 2011 消除不一致性;加入了大部分的C++ Technical Report 1程序库(数学上的特殊函数除外)
C++14 2014 支持普通函数的返回类型推演,泛型 lambda,扩展的 lambda 捕获,对 constexpr 函数限制的修订,constexpr变量模板化

1.4 程序创建的技巧

编程步骤

1.4.1 成立源代码文件

推而广之名是后缀由一个句点和一个依然多单字符组成,使用什么扩张名取决于C++实现。

C++****实现 源文件扩展名
UNIX C(C ++程序使用C,部分支持cc、cxx)、c(C程序使用c)
GNU C++ C、cc、cpp、cxx、c++
Microsoft Visual C++ cpp、cxx、cc

1.4.2 编译和链接

开拓进取过程:

  1. 运用一个C++到C的编译器程序(即cfront)
  2. 支付平素的C++到目的代码的编译器
C++实现 编译和链接方法
UNIX CC spiffy.C //编译 <br /> CC my.C spiffy.o -lm //链接之前输出的目标代码,-lm表示链接数学库中的函数 <br /> a.out //执行
GNU C++ g++ spiffy.cxx //编译 <br /> g++ my.cxx spiffy.o -lg++ //链接之前输出的目标代码,-lg++表示链接C++库<br /> a.out //执行
Microsoft Visual C++ Compile:编译<br /> Build和Make:编译项目中所有源代码文件的代码,只重新编译该文件 <br /> Build All:重新编译所有的源代码文件<br /> Link:将编译后的源代码与所需的库代码组合起来 <br /> Run或Execute:运行程序 <br /> Debug:以步进的方式执行程序

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图