热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

剧本化HTTP获得相应指定要求

剧本化HTTP下面将会用js代码支配HTTP下面将会申明在没有致使web浏览器从新加载任何窗口或许窗体的情况下,剧本完成web浏览器和服务器之间的通讯。ajax:为一种找夙兴防止页

剧本化HTTP
下面将会用js代码支配HTTP
下面将会申明在没有致使web浏览器从新加载任何窗口或许窗体的情况下,剧本完成web浏览器和服务器之间的通讯。
ajax:为一种找夙兴防止页面重载而动态更新页面的体式格局,不过现在是直接数据驱动,或许相似于vue的单页运用
comet:这个和ajax恰好相反,为推送音讯到web浏览器端

ps;ajax和comet都为一个美国的洗濯日用品牌,╮(╯▽╰)╭

总说

网页信标

img元素有一个src属性,当剧本设置img元素的src属性,且把信息作为图片的url的查询字符串部份,即能把经由编码的信息椽笔给web服务器,web服务器实际上必需返回一个图片作为效果。
事实上,运用一个空的js剧本也可完成此操纵
一个百度统计的js剧本以下

(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?d2539dae35b4dcf0e7814c110ecefa9f";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();

剖析,一个采纳es5编写的一个闭包,动态加载一个script标签,向https://hm.baidu.com/hm.js?d2…,而且查询的字符串为?背面的参数,服务器只需要统计?背面的get要求数量,即可完成一次次的统计使命。用户的页面停止,直接盘算两次加载的时间差即可。数据库完成统计即可。一个最简朴的页面统计完成。

iframe

一个镌汰的标签。
下面是旧的ajax体式格局
运用iframe完成一次ajax,剧本先把要发送给web服务器的信息编码到url中,服务器在动态的建立一个html文档,将其内容返回给web,在iframe中显现,这类体式格局受道同源的限定。
上方的体式格局以及摒弃。

script

经由过程script元素的src属性设置url提议http get要求,即一种基于script的ajax传输,服务器运用json编码,实行剧本的时刻,将其转码,这类的ajax同时也称为jsonp
即这类的跨域可以不遭到同源的限定

ajax中的x

ajax中的x为xml为一种可选的通讯体式格局,也可以运用JSON完成通讯。

其他

一些更多的通讯协定,包括rpc(长途过程挪用)许可运转于一台盘算机的递次挪用另一台盘算机递次的子递次。假如面向对象编程,则长途过程挪用为长途挪用,长途要领挪用。

宣布/定阅事宜体系

一种设想情势,有两种,一种是观察者情势,一种是宣布定阅情势,
即,音讯推送运用的是宣布/定阅事宜体系

观察者情势

企图:定义对象间的一对多的依靠关联,当一个对象状况发作转变时,一切依靠它的对象都取得关照,并举行更新
处置惩罚:一个对象状况给其他对象关照的题目,
举例运用:有个天色中心的目的A,特地监听天色的变化,而有个显现天色的观察者B,B把本身注册到A里,当A触发天色变化的时刻,调理B更新要领,并带上本身的上下文。
《剧本化HTTP 获得相应 指定要求》

宣布/定阅情势

定阅者把本身想注册的事宜注册到调理中心,当该事宜触发时,宣布者宣布事宜到调理中心,由调理中心一致调理定阅者注册到调理中心的处置惩罚代码。
举例:有个界面及时显现天色,它就定阅天色事宜(注册到调理中心),当天色变化时定时猎取数据,作为宣布者到调理中心,调理中心调理定阅者的天色处置惩罚递次。
《剧本化HTTP 获得相应 指定要求》

总结,辨别

一个为点对点,一个为中心有一个过渡的,仅此而已。

ps 有一本书js的设想情势,引荐看看
http://shop.oreilly.com/produ… 以及
https://addyosmani.com/resour…

购置
https://www.amazon.com/_/dp/1…

很想晓得有木有中文版的。吐槽 28美圆,算计120多元,书怎样那末贵呢。好贵,发起注册一下

XMLHttpRequest

浏览器在CMLHttpRequest类上定义了其HTTP 的API 这个类的每一个实例都示意一个自力要求/相应对。而且这个对象属性和要领许可指定要求细节和提取相应数据。

同java相似,运用这个api的第一件事实例化XMLHttpRequest对象

ps:能重用已存在的XMLHttpRequest 然则之前的对象将会被挂起

HTTP要求的4个部份

  1. http要求要领或许行动
  2. 正在要求的URL
  3. 一个可选的要求头鸠合,个中可以包括身份考证信息
  4. 一个可选的要求主题

HTTP返回的相应

  1. 一个数字和文字组合成的状况码,如404(示意不存在)
  2. 一个相应头鸠合
  3. 相应主体

为何当地不能直接运用ajax

在当地写js的时刻,必需搭建一个服务器其AJAX才事情
缘由:因为文件的协定为file而当地的要求的协定为http,因为同源战略的影响,致使没法运用http协定的文件,故当地没法直接运用ajax

处置惩罚要领,chrome的浏览器接见
https://chrome.google.com/web… 装置chrome官方供应的当地测试服务器,用于在当地搭建服务器。

或许,编写Node.js 运用Express框架,加载Static 模块,完成当地的静态服务器搭建。

指定要求

指定要求运用的是request.open(),此要领将会初始化一个要求从js代码中挪用。
第一个参数指定HTTP要领或行动,字符串不辨别大小写,通经常使用大写字母婚配HTTP协定,GET用于通例要求,适用于当URL完整指定要求资本。当要求对服务器没有任何副作用以及当服务器的相应可缓存的时刻,运用GET。关于POST来讲,常经常使用于HTML表单,它在要求主体中包括分外数据,即表单数据,且这些数据经常储存到服务器的数据库中。此要求不会被缓存。
一样的,还许可其他的一些要求,比方DELETE,HEAD,OPTIONS,PUT等要求。
第二个参数为URL,为要求的主体,相关于文档的URL,这个文档包括挪用open()的剧本,这个不能跨域,要求必需为同域的

设置要求头

request.setRequestHeader('Content-type', 'text/plain');

下面将会设置要求头,上方设置要求头为Content-type的内容为text/plain

有些要求头因为浏览器的安全题目,被制止要求,所以有些不能要求。

假如要求一个遭到密码保护的url,此时不需要设置Authorization头,只需要直接在open的第三四个参数,传入即可。

发送要求

因为get要求不包括主体,则直接send要领即可完成一个包的发送,

因为跨域限定致使不能读取

在http://1.197.156.53/编写js以下

// 编写要求头GET并完成发送
var request = new XMLHttpRequest(); // 设置要求的类
request.open('GET', 'https://www.baidu.com/'); // 设置要求的链接和体式格局
request.setRequestHeader('Content-Type', 'text/plain'); // 设置要求头
request.send(null); // 发送包

《剧本化HTTP 获得相应 指定要求》
跨域要求被阻拦。
因为不是同源,同源被阻拦

是同源的

// 编写要求头GET并完成发送
var request = new XMLHttpRequest(); // 设置要求的类
request.open('GET', './index.js'); // 设置要求的链接和体式格局
request.setRequestHeader('Content-Type', 'text/plain'); // 设置要求头
request.send(null); // 发送包

完成一次发包操纵

递次题目

HTTP要求的各个部份有指定的递次,要求要领和URL会首先抵达,然后接着要求头,末了要求主体。末了挪用send()要领,完成发送。
递次题目:必需先挪用open后挪用send()才方可。

一个栗子,经由过程post要领发送纯文本给服务器

function postMessage(msg) {
var request = new XMLHttpRequest(); // 新要求
request.open('post', '/log.php'); // 用POST向服务器端发送剧本
// 用要求主体发送纯文本音讯
request.setRequestHeader('Content-Type', 'text.plain;charset=utf-8'); // 要求主体将是纯文本
request.send(msg);
// 要求完成,我们将疏忽任何相应和任何毛病
}

即上方定义了一个post要求,完成其发送,守候其服务器相应

取得相应

send()发送今后将会守候服务器相应,此时将不会壅塞。
在HTTP发送完成要求今后,下一步将会取得相应。
下面编写函数猎取HTTP相应的onreadystatechange

// 发出一个HTTP GET要求猎取指定的URL的内容
// 当相应胜利抵达,考证它是不是是纯文本
// 假如是,将会把它传递给指定的回调函数
function getText(url, callback) {
var request = new XMLHttpRequest(); // 建立一个新要求
request.open('GET', url); // 建立一个指定待猎取的url
request.Onreadystatechange= () => { // 当GRT要求完成今后,触发该事宜,发生回调函数
// 假如要求完成,则它是胜利的
if (request.readyState === 4 && request.status === 200){ // 假如下载操纵完成,即为4,而且http状况码为200
var type = request.getResponnseHeader('Content-Type'); // 猎取HTTP头部信息
if (type.match(/^text/)) //正则婚配,肯定相应为文本
callback(request.responseText); // 回调函数,将返回的DOM树,传递给回调函数
}
};
request.send(null); // 发送
}

注重,该体式格局为异步的,send要领不会壅塞其他操纵

同步相应

因为其下载的题目,平常异步处置惩罚HTTP相应,然则同步也可以,不过因为客户端js为单线程的,当send()要领壅塞今后,将会致使浏览器的ui被凝结,假如衔接的服务器过慢,将会致运用户的操纵出现题目。

要领直接open运用第三个参数为false

相应解码

当服务器相应的为XML文档的时刻,其返回的值为document对象,能运用操纵节点的体式格局,对其举行操纵
当服务器发送对象或许数组的结构化数据,如JSON,

运用JSON.parse 对结构化数据举行剖析

下方誊写一个函数,举行结构化数据的剖析

// 提议HTTP GET相应,取得指定的URL内容
// 当相应抵达时,把他们剖析后的XML Document对象,剖析后的JSON对象
// 或许字符串情势传递给回调函数
function get(url, callback){
var request = new XMLHttpRequest();
request.open('GET', url); // 指定url
request.Onreadystatechange= () => { // 监听器
// 假如要求完成且胜利
if (request.readyState === 4 && request.status === 200) {
// 取得相应要求
var type = request.getResponseHeader('Content-Type');
// 搜检范例
// 当为xml的时刻
if (type.indexOf('xml') !== -1 && request.responseXML) // 确认是不是为xml
calback(request.responseXML); // 回调函数
else if (type === "application/json") // 假如头部的信息为JSON
callback(JSON.parse(request.responseText)); // 将效果JSON花样剖析
else
callback(request.responseText); // 假如是字符串相应
}
};
request.send(null); // 马上发送要求
}

对两种数据剖析,一种为JSON花样,一种为XML花样

ps 不发起运用eval

ps 因为跨域的题目,只能读取同源的数据,经由过程script剧本支配HTTP剧本并完成加载并实行剧本

script 元素能提议跨域的HTTP要求

能运用request.overrideMimeType可以完成对MIME范例的变动


推荐阅读
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
author-avatar
僾媙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有