位置: 编程技术 - 正文

Javascript 基础---Ajax入门必看(javascript基础编程)

编辑:rootadmin

推荐整理分享Javascript 基础---Ajax入门必看(javascript基础编程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript+,javascript基本语法,javascript基本语句,JavaScript 基础类型,javascript基本语句,javascript基础案例,javascript基础案例,javascript基础案例,内容如对您有帮助,希望把文章链接给更多的朋友!

Ajax 是现代Web 应用程序开发的一项关键工具。它让你能向服务器异步发送和接收数据,然后用 Javascript 解析。 Ajax 是 Asynchronous JavaScript and XML (异步JavaScript 与XML)的缩写。

Ajax 核心规范的名称继承于用来建立和发起请求的 Javascript 对象:XMLHttpRequest 。这个规范有两个等级。所有主流浏览器都实现了第一级,它代表了基础级别的功能。第二级扩展了最初的规范,纳入了额外的事件和一些功能来让它更容易与 form 元素协作,并且支持一些相关规范。

1. Ajax起步

Ajax 的关键在于 XMLHttpRequest 对象,而理解这个对象的方法是看个例子。下面代码展示了 XMLHttpRequest 对象的简单用法:

三个额外的文档非常简单:

效果如下图所示:

随着用户点击各个水果按钮,浏览器会异步执行并取回所请求的文档,而主文档不会被重新加载。这就是典型的 Ajax 行为。

2. 使用 Ajax 事件

建立和探索一个简单的示例之后,可以开始深入了解 XMLHttpRequest 对象支持的功能,以及如何在请求中使用它们了。起点就是第二级规范里定义的那些额外事件:

这些事件大多数会在请求的某一特定时间点上触发。 readystatechange 和 progress 这两个事件是例外,它们可以多次触发以提供进度更新。

调度这些事件时,浏览器会对 readystatechange 事件使用常规的 Event 对象,对其他事件则使用 ProgressEvent 对象。 ProgressEvent 对象定义了 Event 对象的所有成员,并增加了下图中介绍的这些成员:

下面代码展示了如何使用这些事件:

这是之前示例的一种变型,为一些事件注册了处理函数,并在一个 table 元素里为处理的每个事件都创建了一条记录。从下图中可以看到 Firefox 浏览器是如何触发这些事件的。

3. 处理错误

使用 Ajax 时必须留心两类错误。它们之间的区别源于视角不同。

第一类错误是从 XMLHttpRequest 对象的角度看到的问题:某些因素阻止了请求发送到服务器。例如 DNS 无法解析主机名,连接请求被拒绝,或者URL无效。

第二类问题是从应用程序的角度看到的问题,而非 XMLHttpRequest 对象。它们发生于请求成功发送至服务器,服务器接收请求、进行处理并生成响应,但该响应并不指向你期望的内容。例如,如果请求的URL 不存在,这类问题就会发生。

有三种方式可以处理这些错误,如下面代码所示:

3.1 处理设置错误

需要处理的第一类问题是向 XMLHttpResquest 对象传递了错误的数据,比如格式不正确的 URL 。它们极其容易发生在生成基于用户输入的URL 时。为了模拟这类问题,上面文档中有添加一个标签 Bad URL (错误的URL)的button 。按下这个按钮会以以下形式调用 open 方法:

httpRequest.open("GET"," 这是一种会阻止请求执行的错误,而 XMLHttpRequest 对象会发生这类事件时抛出一个错误。这就意味着需要用一条 try...catch 语句来围住设置请求的代码,就像这样:

catch 子句让你有机会从错误中恢复。可以选择提示用户输入一个值,也可以回退至默认的URL ,或是简单地丢弃这个请求。 在这个例子中,仅仅调用了 displayErrorMsg 函数来显示错误消息。

3.2 处理请求错误

第二类错误发生在请求已生成,但其他方面出错时。为了模拟这类问题,在示例中添加了一个标签为 Bad Host (错误主机)的按钮。当这个按钮被按下后,就会调用 open 方法访问一个不可用的 URL:

Javascript 基础---Ajax入门必看(javascript基础编程)

这个URL 存在两个问题。第一个问题是主机名不能被 DNS 解析,因此浏览器无法生成服务器连接。这个问题知道 XMLHttpRequest 对象开始生成请求时才会变得明显,因此它会以两种方式发出错误信号。如果你注册了一个 error 事件的监听器,浏览器就会向你的监听函数发送一个 Event 对象。以下是示例中使用的函数:

当这类错误发生时,能从 XMLHttpRequest 对象获得何种程度的信息取决于浏览器,遗憾的是大多数情况下,会得到的值为 0的 status和空白的 statusText 值。

第二个问题是URL和生成请求的具有不同的来源,在默认情况下这是不允许的。你通常只能向载入脚本的同源URL发送Ajax请求。浏览器报告这个问题时可能会抛出 Error 或者触发error事件,不同浏览器的处理方法不尽相同。不同浏览器还会在不同的时点检查来源,这就意味着不一定总是能看到浏览器对同一问题突出显示。可以使用跨站资源规范(CORS,Cross-Origin Resource Sharing)来绕过同源限制。

3.3 处理应用程序错误

最后一类错误发生于请求成功完成(从XMLHttpRequest对象的角度看),但没有返回你想要的数据时。为了制造这类问题,在上面示例中添加一个说明标签为 cucumber 的 button 。按下这个按钮会生成类似于 apples、cherries 和 bananas 按钮那样的请求URL,但是在服务器上不存在 cucumber.html 这个文档。

这一过程本身没有错误(因为请求已完成),需要根据 status属性来确定发生了什么。当请求某个存在的文档时,会获得这个状态码,它的意思是服务器无法找到请求的文档。可以看到示例是如何处理(意思是OK)以外的状态码的:

在这个例子中,只是简单的显示了status和statusText的值。而在真正的应用程序里,需要以一种有用且有意义的方式进行恢复(比如显示备用内容或警告用户有问题,具体看哪种更适合应用程序)。

4. 获取和设置标头

使用XMLHttpRequest对象,可以设置发送给服务器的请求标头(Header)和读取服务器响应里的标头。

4.1 覆盖请求的HTTP方法

通常不需要添加或修改Ajax请求里的标头。浏览器知道需要发送些什么,服务器也知道如何进行响应。不过,有几种情况例外。第一种是 X-HTTP-Method-Override 标头。

HTTP标准通常被用于在互联网上请求和传输HTML文档,它定义了许多方法。大多数人都知道GET和POST,因为它们的使用最为广泛。不过还存在其他一些方法(包括PUT和DELETE),这些HTTP方法用来给向服务器请求的URL赋予意义,而且这种用法正在呈现上升趋势。举个例子,假如想查看某条用户记录,可以生成这样一个请求:

这里只展示了HTTP方法和请求的URL。要使这个请求能顺利工作,服务器端必须由应用程序能理解这个请求,并将它转变成一段合适的数据以发送回服务器。如果想删除数据,可以这么写:

此处的关键在于通过HTTP方法表达出你想让服务器做什么,而不是把它用某种方式编码进URL。

以这种方式使用HTTP方法的问题在于:许多主流的Web技术只支持GET和POST,而且不少防火墙只允许GET和POST请求通过。有一种惯用的做法可以规避这个限制,就是使用 X-HTTP-Method-Override标头来指定想要使用的HTTP方法,但形式上市在发送一个POST请求。代码演示如下:

在这个例子中,有使用XMLHttpRequest对象上的setRequestHeader方法来表明想让这个请求以HTTP DELETE方法的形式进行处理。请注意我在调用open方法之后才设置了这个标头。如果试图在open方法之前使用setRequestHeader方法,XMLHttpRequest对象就会抛出一个错误。

PS:覆盖HTTP需要服务器端的Web应用程序框架能理解X-HTTP-Method-Override这个惯例,并且你的服务器端应用程序要设置成能寻找和理解那些用的较少的HTTP方法。

4.2 禁用内容缓存

第二个可以添加到Ajax请求上的有用标头是Cache-Control,它在编写和调试脚本时尤其有用。一些浏览器会缓存通过Ajax请求所获得的内容,在浏览会话期间不会再请求它。对在前面的例子而言,意味着 apples.html、cherries.html和bananas.html 上的改动不会立即反映到浏览器中。下面代码展示了可以如何设置标头来避免这一点:

设置标头的方式和之前的例子一样,但这次用到的标头是 Cache-Control,而想要的值是 no-cache。放置这条语句后,如果通过Ajax请求的内容发生了改变,就会在下一次请求文档时体现出来。

4.3 读取响应标头

可以通过 getResponseHeader 和 getAllResponseHeaders 方法来读取服务器响应某个Ajax请求时发送的HTTP标头。在大多数情况下,你不需要关心标头里有什么,因为它们是浏览器和服务器之间交互事务的组成部分。下面代码展示了如何使用这个属性:

效果图如下:

根据此图可以看出开发服务器正在运行的Web服务器软件是 IntelliJ IDEA .0.4,最后修改 apples.html 文档的时间是6月日(但屏幕截图是7月5日)。

js中window.open的参数及注意注意事项 IE9下使用window.open时需要注意name参数值不能有"-"出现,否则会出现脚本错误,IE9以及版本测试没有问题window.open(URL,name,specs,replace)参数说明URL可选。打开指

JavaScript基础重点(必看) 接触JavaScript这门语言也就很长的时间了,但从来没有系统的去了解这么语言。趁现在刚刚毕业以及某些原因无心工作的情况下去系统的了解一下这么语

老生常谈onBlur事件与onfocus事件(js) onFocus事件就是当光标落在文本框中时发生的事件。onBlur事件是光标失去焦点时发生的事件。可以编如下例子1.htmlHTMLHEADTITLE使用onBlur事件处理程序/TITLE/HE

标签: javascript基础编程

本文链接地址:https://www.jiuchutong.com/biancheng/373537.html 转载请保留说明!

上一篇:JavaScript事件处理的方式(三种)

下一篇:js中window.open的参数及注意注意事项(javascript:openattachment)

  • 个税申报数是按应发数还是实发数进行申报?
  • 纯外贸出口企业出售固定
  • 预收款开发票,不确认收入可以吗?
  • 分公司独立核算的利弊
  • 邯郸银行公对公转账时间
  • 不征税项目可以抵扣进项税吗
  • 采取简易计税外经证核销需要哪些资料?
  • 租赁费支出可以在税前扣除吗
  • 单边征收
  • 特殊金融机构有哪些
  • 合理损耗如何计算单价?
  • 收到联营企业分派的现金股利为什么不计入利润总额
  • 没有金税盘怎么查询已开发票
  • 一般纳税人简易征收3%可以开专票吗
  • 原材料损失分录
  • 被扣留的质保金怎么办
  • 营业收入现金怎么计算
  • 酒店另外收电费
  • win11怎么改名
  • 玩穿越火线总是提示机器遇到
  • 我开了一个物流公司,有人要开发票怎么办
  • 剑灵怎么截图正版
  • 在windows7提供了一种什么技术
  • 车辆折旧完了以后
  • php脚本主要用于的三个领域
  • php中字符串函数
  • 个人非货币性资产投资个人所得税
  • 存货盘亏能否税前扣除
  • 进项发票抵扣途中怎么办
  • php数组实现原理
  • 库存盘点差异会计分录
  • 资产负债表要点
  • 使用php进行mysql数据库编程的基本步骤
  • 发票开具的常见错误
  • 阿里云phpstudy
  • PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
  • reactvate
  • vite搭建vue3
  • 工程主营业务收入
  • java守护线程和普通线程jvm区别
  • 房地产企业样板间装修费账务处理
  • 购买固定资产发生的支出是资本性支出
  • 原始凭证分割单可以入账么
  • 企业影响工程成本的原因
  • 城建税的减免规定有哪些
  • 委托银行贷款利息发票谁提供
  • 对方企业倒闭了是否能函证
  • 计量差错引起的原材料盘亏
  • 待抵扣进项税额分录
  • 非税收入如何退款
  • 做账一定要计提本月工资吗
  • 借款利息如何支付
  • 固定资产折旧计算表模板
  • 应交所得税如何调整
  • 教育费附加计入其他应付款吗
  • 固定资产清理时累计折旧提完了怎么账务处理
  • sqlserver 获取字符位置
  • 学会整理内容
  • 通过备份记录获取文件
  • debian10配置ipv6地址
  • WINDOWS操作系统内置的GUEST
  • win8 怎么样
  • ubuntu 电子书
  • 怎样修改mac
  • win10系统无法开机
  • perl如何使用
  • javascript中的关键字有哪些
  • react.development.js
  • 怎么利用python爬虫爬数据
  • js原生dialog
  • jquery移动端ui框架
  • javascript构造函数继承
  • 广东省电子税务局登录方式
  • 重庆地方税务局刘飞虎
  • 增值税消费税申报比对不符怎么办
  • 按季度 税费申报日期
  • 纳税人欠缴税款数额在10万元以上
  • 八个点可以开出几张发票
  • 国家电子税务登录入口
  • 股东非自然人
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设