网上支付逻辑

1.浏览器是一段代码,程序写的一个电脑应用/服务器也是一段代码,程序写的一个电脑应用
2.在浏览器这个电脑应用上,有一个输入栏功能,在它的输入栏里面写一串符合http协议的字串,也就是俗称的网址,这个应用就会向远在他方的另外一台电脑上的一个叫服务器的应用(本质上就是一串代码)要数据
3.远在他方的这个电脑应用(服务器),响应你的要求,给你数据
4.浏览器就把这些获得的数据根据html,css,JavaScript语法把一些毫无意义的字符串变成一个好看的页面(俗称网页)
// 上面的说的告诉我们一个道理,就是所有的代码都是在服务器上的,浏览器要渲染的页面代码是服务器上存的,响应浏览器的功能的实现也是服务器这个电脑应用做的,这些服务器响应代码也是在服务器那边的


网上支付的实现逻辑

1.页面得有一个好看的页面,还有各种支付按钮,还可以增减相应的金额,正确显示和操作'余额'
2.对于计算机来说,一切都是数据,不过数据也分很多种类型,不管怎样,计算机什么都不认识,就知道指令和数据
3.所以一个网页上面可以操作的'余额'对于人类而言是存在银行里面的钱,对于计算机来说就是一个number类型的数据,而且可以被操作控制,那么它就不是真正意义上的钱
4那我们如何做到让他变成真正的钱呢?这时候数据库的作用体现出来了,在互联网世界,所谓的钱就是number数据类型,我们在服务器后面做一个数据库,让浏览器上显示的'余额'的改变,记录在数据库上,然后让数据库上的数据和现实世界银行里面的存款同步,那么我们就实现了网络支付了,页面上的余额就变成真正意义上的钱了


SRJ

  • 浏览器请求,请求的是html,用它来渲染页面,有没有想过,让服务器返回JavaScript代码呢?
  • 我们为什么要让服务器返回JavaScript呢?因为:
    用 form 可以发请求,但是会刷新页面或新开页面
    用 a 可以发 get 请求,但是也会刷新页面或新开页面
    用 img 可以发 get 请求,但是只能以图片的形式展示
    用 link 可以发 get 请求,但是只能以 CSS、favicon 的形式展示
    //也就是说用script发送请求,利用返回的JavaScript并且执行,能给用户更好的体验,这就是SRJ技术发明出来的原因
  • 为什么要让后端返回前端代码呢?
    //浏览器上的页面(前端代码)上的'余额'变化,是不是要用到JavaScript代码?例如简单地让页面上的数字,点一个按钮之后'余额'减去100块,刚才我们提到让后台服务器做一个数据库,并且让数据库和银行的数据库上的客户余额number同步,就实现了网上钱的同步,可是这仅仅是后端服务器数据同步了啊,一个客户怎么知道自己的钱还剩下多少?打电话去问京东商城的后台服务器程序员吗??? 是不是智障?
    //最简单的做法就是改变前端代码,让使用浏览器上的客户第一眼就能看见余额发生了变化.所以后端不单单做后台服务器数据库同步的工作,还要返回一串JavaScript代码操作页面,使得在浏览页面的客户知道自己的余额发生了哪些变化,还剩下多少钱
    //简单来说,前端要知道'余额'真实的数据,这就得去请求后端服务器,取得真正的数据之后,不管是否成功取到数据都要进行下一步操作,成功就改变页面上的余额,不成功就得告诉客户什么原因买东西不成功
    //简单来说前端请求后端数据的之后,要改动前端代码直观反映信息,给正在使用的客户
    //而前端用到的就是JavaScript代码
    //所以要用到SRJ技术

狗牙

//世界之大,无奇不有,在南太平洋某个小岛上,这个小岛上的人用狗牙当做货币,用10个狗牙就可以娶媳妇
//对于中国人来说,狗牙就是普通的狗牙,对于那个小岛上的人而言,狗牙就是财富
在计算机的世界里,服务器响应文的第四部分,响应浏览器返回的就是一堆字符串,无论这些字符串按照json/xml/JavaScript/html/css...语法来写,对于服务器来说这些数据的类型就是string(中国人的狗牙)
//可是对于获得这些数据的浏览器来说,这些不是普通的string,而是符合html/css/JavaScript....语法的代码(南太平洋小岛的货币,是财富)
//结论是:在计算机的领域里,一切都是指令+数据,其中数据的类型就是重中之重,所以学编程,要有数据类型思维,数据类型的转换对于编程来说是十分重要的


jsonp

什么是jsonp?//就是跨域的SRJ

  • 利用script标签,跨域请求别人家的服务器数据
  • 为什么要请求别人家的服务器数据?
    //网上支付的实现,使得我们的财富变成了互联网上的一串数据,现实中的钱在银行,银行有自己的电脑系统,他有自己的服务器,如果我们在京东买东西,京东上的余额现实剩下一个亿人民币,然后在上面买东西,一顿青铜操作猛如虎,花了五千万,'余额'数据变成了50000000,请问最后这个余额五千万,是在京东商城的后台服务器上吗? 当然不是,是在银行的服务器上,那么你的浏览器页面上的这个五千万余额数字,请求的当然不是京东的服务器的数据库而是银行的服务器上的数据库里面的数据,所以要跨域请求数据,所以jsonp出现了
  • 那么一个巨大的问题来了?
    //一家互联网公司,不管前端后端,代码都在自己家的服务器上,所以前端要操作的JavaScript代码后端可以写,还能返回给自己家前端,也就是说前后端代码存在很严重的耦合问题,后端要非常了解前端代码的细节,才能顺利地返回前端要求的JavaScript函数代码
    //可是我现在请求别人家的后台数据啊,访问的是别人家的服务器代码,本公司的前端和别人家公司的后端,压根不认识啊,何况两个公司的代码,能让你知道吗?咋办?
  • 在这个伟大的时刻就是callbackName登场的时候了
    //怎么解决跨域请求数据,并且正确反映在页面上?
    //办法就是让页面会变化的代码,让前端自己写好,跨域去请求别人家的服务器,获得数据之后,不要让别人家的后端来返回操作页面的代码了,让前端和后端的代码解耦,分离.
    // 具体的实现办法就是,行业默认这些前端获得数据后,要改变页面的代码,通通让前端来写好,并且统一名字叫'独一无二'然后让这个'独一无二'赋值给callbackName,前端利用?callbackName='独一无二',在请求的时候告诉别人家的后端,要改变页面的代码我自己写好了,你如果让我请求到数据之后顺便运行这个叫callbackName的函数把!!
  • 有一个小细节,调用代码在后端已经写完,因为使用的script src所以,后端的代码成功响应的那一刻,页面上的JavaScript会马上执行,前端代码就不用再写调用代码了

京东商城的前端,请求银行后台服务器的数据,会成功,也会失败.不是说请求就必定成功的

//所以前端改变页面的代码,可以先定义好但是不能马上执行,因为执行就意味着支付成功了,余额改变了,可是究竟成不成功是需要银行后台告诉你的啊,这个函数只能是成功之后执行的啊,不然你的页面上的余额number这个数据就和银行的不同步了

所以前端可以定义支付操作的结果的JavaScript代码,但是不能执行,什么时候执行?让后端执行,因为后端知道你数据请求是否成功,成功就在响应报文第四部分写上执行函数,如果不成功就执行不成功的函数

简单来说就是定义方封装函数,使用方调用函数

很多事情就通了

  • 异步就是不按照JavaScript顺序一行行执行代码,因为不是同步所以叫异步
  • 回调函数就是不自己调用,让别人帮你调用这个函数

你可能感兴趣的:(网上支付逻辑)