1、异步应用程序是使用JavaScript对象做出请求,而并不是提交表单。
2、请求与响应是由Web浏览器处理,而不是直接由JavaScript代码处理。
3、一旦web浏览器得到异步请求的响应,它会以服务器的响应“回头调用”JavaScript代码。
<div>是一个可以持有的相关元素(element)的容器元素,并允许你以一个css规则让所有的元素有统一的样式。
<div id="menu">
<a href="home.html">home</a>
<a href="books.html">writing</a>
<a href="links.html">resources</a>
<a href="lib.html">library</a>
</div>
使用div可以把类似用途的元素集合到一起。
<span>可以让行内文本(inline text)和周围之间有一点间隔。你可以利用css为你的<span>元素设定样式而轻易地装饰文本。
<span>元素不会创建一个新的文本块儿,但是仍然可以通过css样式设定。
<span>元素可以装饰文本,但是不必开始一个新的段落或块。
Ajax使用异步的JavaScript。Ajax应用程序可以发出请求且取得响应,不需要重新加载整个页面。
异步的JavaScript不会等候服务器的响应,即使服务器正在处理请求,用户还可以继续使用页面。
Web浏览器将HTML和CSS整合成一个页面显示出来,并会运行该页面内的JavaScript程序代码。
在Ajax应用程序中,服务器通常只会送出你需要的数据,不会送出其他的HTML和外观呈现方式。
使用JavaScript可以发出同步或者异步的请求。
JavaScript提供真个事件处理器,当特定事件发生时就调用JavaScript程序代码。onChange()以及onClick()就是两个常用的事件处理器。
浏览器一直都知道请求正处于何种就绪状态,而你的JavaScript程序代码可以取得这样的信息。
通过请求对象的onreadystatechange属性,你可以让你的浏览器在每次就绪状态改变时运行特定的JavaScript函数。
当一个请求的就需状态是“4”,表示该请求已经被处理完毕,浏览器已经接收到来自服务器的响应。
事件处理大集合:
onChange:任何时候,只要表单字段有改变,onChange事件就会被触发。例如,在字段内输入一个新的值或者清除现有的值。
onFocus:不管用tab键的方式还是点击鼠标的方式,只要一个字段取得焦点,则依附在onFocus时间上的javaScript代码就会执行。
onBlur:不管用tab键还是点击鼠标的方式,只要用户离开一个字段,那么依附在onBlur事件上的javaScript函数就会被运行。
如果利用DOM对网页做出修改,浏览器会立刻更新网页。
浏览器会对请求URL进行缓存处理。。。
1:你的程序代码对浏览器做出请求
大多数的Ajax应用程序一开始就根据事件(例如:电话号码被输入)运行javaSciprt函数。JavaScript建立一个请求URL并送出一个请求到该URL。请求来自浏览器而不是直接来自你的javaScript
2:服务器返回一个响应
当响应被送到浏览器,你所指定的回调函数就会运行。但如果浏览器将请求URL进行缓存处理的话,就会把此URL和服务器的响应记录下来供以后使用。
如请求是:getUpdateBoardSales-ajax.php
服务器响应:1643
3:你有了一个动态的应用程序
这个时候你的JavaScript回调函数可以利用基于服务器的响应的值来更新此网页。在这个过程中不需要提交表单,也不需要重绘整个页面。
4:你的程序代码对web服务器发出另一个请求
遇上一个一样请求被送到服务器的getUpdateBoardSales-ajax.php脚本进行处理;
5:浏览器让你的程序代码可以使用响应
浏览器发出它之前对此URL做出过的请求,且在缓冲区还保留着当时的响应,所以它决定帮你省一些时间,不送出该请求,而是直接把缓存中的响应交给你的程序代码。
忽然间你的应用程序每次都响应相同的数据。你的回调函数取得的数据不是最新的,而且你的网页不会更新信息。解决办法可以加入一些可变的参数:如url=url+"?dummy="+new Date().getTime();
问题:
我现在知道请求是如何到服务器上的。但如果请求URL要求运行的程序在服务器上找不到,为何浏览器还会运行我们的回调函数?难道它不应该向用户报告错误码?
答:浏览器一定会运行回调函数,而且它也确实报告了错误。
浏览器一定会运行回调函数,因为这样你才有机会对服务器对你的请求所作出的处置进行响应。因为你使用的是异步请求,回调是你唯一可以写程序代码处理服务器响应的地方。浏览器为了帮助你处理响应,它同时提供请求的就绪状态(state)和请求的状态码(status)。
同一个请求的state和status是有差别的。请求的就绪状态用来告诉浏览器该请求已经处理到什么阶段;初始化、处理中、完成等。请求“完成”不代表请求“成功”所以用status说明这一点。
如果程序有任何问题,服务器会通过状态码(status code)来报告。状态码指示在请求期间发生了什么事,以及事情的后果是否如你所愿。所以即使你知道请求已经完成,你仍然需要检查状态码以确定一切没有问题。
如果找到程序请求且没有遇到任何问题,返回“200”状态码。
如果服务器找不到URL指定的程序,状态码是:“404”。
注意:当服务器的响应完成之后,请求对象的就绪状态就被设定为“4”,然后及时你再度使用请求对象,也无法重新设定其就绪状态。所以必须重新设定请求对象。
问:如果在回调函数内直接将请求对象的就绪状态设定为“0”,这样不是比较简单吗?
答:理论上没错,但是readyState是只读的属性,不能直接在javaScript程序中设定,只有浏览器可以去改变请求对象的readyState属性的值。
当调用请求对象的open()方法时,第三个参数是用来指定是否为异步:“true”表示异步,“false”表示同步。
DOM允许你改变网页内容而不需要重载页面。
对于Web浏览器来说次序很重要。
当浏览器取得你的HTML且将它表示为一颗树的时候,浏览器必须保持文本和元素的次序,否则页面的段落次序可能会有错误,黑体活下划线可能会运用在错误的字上面。
浏览器将你的标记组织成一个“树状”结构。Web浏览器将你的网页视为是一棵树,由元素、文本、属性以及其他标记所组成的树。
一种新树:DOM树
一旦浏览器持有<html>在顶端的标记,它就可以为每一个节点创建一个新对象。最后的结果是有一大堆对象互相连接。
这整个东西通常被称为“DOM”树,因为它将你的文档用对象的方式标示,并将你的标记转成一个树状模型。
你可以在JavaScript中利用“document”变量取得这棵树。
取得文档的根元素:
通过documentElement属性,你可以取得HTML文档的<html>根元素。
Var
htmlElement=document.documentElement;
documentElement是document对象的一个特殊属性,它总是返回此DOM树的根元素。
通过id属性找到一个元素:
getElementById()
节点几乎知道所有的事:DOM内一切都是节点,元素和文本时特殊类型的节点,但它们还是节点。只要你有节点,就可以利用nodeName取得节点的名字,利用nodeValue取得节点的值。
但是,必须注意你在处理的节点是什么类型,否则,当你预期取得元素名字或文本的字符串时可能会得到空值。元素节点有一个名字,想“div”或“img”,但是没有值。文本节点没有名字,但是有值,也就是节点内的文本。
Node notetype nodeName noteValue
Div 元素节点 “div” null/undefined
Em 元素节点 “em” null/undefined
"bread-first" 文本节点
null/undefined
"bread-first"
元素节点的noteValue是未被定义的。
文本节点的noteName就是它的文本。
元素节点都有一个noteName,文本节点都没有noteName。
Javascript可以通过使用特殊的关键字this来让你知道究竟是DOM树中的那个节点调用此函数。
一个元素只能有一个父亲。
所以当你把一个元素加入到另一个div下面时,在上面的父子关系会自动断开。
浏览器利用DOM(文档对象模型)把构成网页的HTML、CSS以及JavaScript标示成一棵对象树。
你可以利用javaScript查看甚至改变DOM树。你对DOM树所做的更改会自动反映到浏览器所呈现的画面上。
你可以在任何Web应用程序中使用DOM,不过是在异步的Web应用程序中。
一棵DOM树是由许多不同的节点组成的,包括了:元素节点、属性节点以及文本节点。
一个元素只可以有一个父亲,如果你改变了某个元素的父亲或者将此元素加入另一个元素中(成为其孩子),就等于将该元素和原父亲之间的关系打断(也就是在DOM树中将该元素从原父亲处移除)。
你可以用javascript代码为DOM树加入css样式和javascript事件处理器。
GET将请求数据放在URL中。
POST请求所送出的数据和请求URL是分开的。
在一个GET请求中,数据是请求URL的一部分,所以一定是文本,但是在POST请求中,你可以送出图像或者XML,所以必须告诉服务器,数据是什么类型的。
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
服务器可以通过请求标头从浏览器取得消息。
Hypertext
Transfer Protocol
POST /placeOrder.php HTTP/1.1
Request Method:POST
Request URI:/placeOrder.php
Request Version:HTTP/1.1
Host:www.headfirstlabs.com
Keep-Alive:300
Connection:keep-alive
Content-Type:application/x-www-from-urlencoded
Content-Lenth:121
这是你的javascript送给服务器的请求。
Content-Type是你加入到请求中的请求标头。
服务器利用响应标头将消息送给浏览器。
服务器送回一个响应标头和状态码。
Http/1.1 400 Bad Request
Request Version :HTTP/1.1
Response Code:400
Date:Web,01 Mar 2006 21:27:39 GMT
Server:Apache
X-Powered-By:PHP/4.3.11
Status:No order was received.
Connection:close
Transfer-Encoding:chunked
Content-Type:text/html
这是服务器送回浏览器的数据。
每个浏览器都有不同的URL长度,包括了作为URL的一部分的任何数据。对大部分浏览器来说,长度限制在2000个字符。
如果使用POST请求送出数据就不会有长度限制。
你可以利用POST请求送出不同类型的数据:纯文本、XML、二进制对象(例如图像和文件)以及你的浏览器所能编码的任何东西。
除非请求内部附带了内容类型,否则服务器不知道POST数据是什么类型。
你可以使用setRequestHeader()以传送额外的消息给服务器。
你可以使用“Content-Type”请求标头告诉服务器POST数据是什么类型。
内容类型如果是:“x-www-form-urlencoded”,就表示使用的数据格式是纯文本形式的名/值对,就像使用GET方式送出表单时的URL编码方式。
POST请求之比GET请求更安全一点点,两者都需要额外的安全层(例如SSL),才能保护数据的安全以免于被人窥视。
分享到:
相关推荐
在"深入浅出Ajax"这本书中,作者深入讲解了Ajax的基本原理和实际应用。 **章节概览** 根据描述,这本书分为七章,每章可能涵盖以下关键知识点: 1. **第一章:初识Ajax** - Ajax的历史和概念 - Ajax工作原理的...
《Head Rush Ajax》是一本专为想要深入理解Ajax技术的开发者编写的书籍。Ajax,全称为"Asynchronous JavaScript and XML",并非一种单一的技术,而是一种综合了多种Web开发技术的运用方式,它允许网页在不刷新整个...
通过这些内容点,我们可以了解到《Head Rush Ajax》是一本以实践为基础、面向有一定前端开发基础但缺乏深入Ajax技术理解的开发者的教材。书籍旨在通过轻松有趣的方式,消除学习者的困惑,让他们能够快速掌握并应用这...
**Head Rush Ajax** 是一本专为想要深入理解并掌握AJAX技术的读者设计的图书,以其图文并茂的风格和详尽的实例解析,成为学习AJAX的理想选择。AJAX,全称为"Asynchronous JavaScript and XML"(异步JavaScript与XML...
《Head First AJAX 深入浅出》不仅是一本学习AJAX的好书,也是理解现代Web开发理念的重要资源。通过阅读本书,读者不仅可以学到具体的编程技巧,还能了解到如何设计更加优雅高效的Web应用。对于希望深入学习AJAX技术...
Head.First-深入浅出面向对象分析与设计-中文.part08
深入浅出-设计模式.part1.rar Head.First-Design.Patterns.深入浅出-设计模式.part2.rar 此文档是分批压缩上传的 请全部下载后一起解压 本书荣获2005年第十五届Jolt通用类图书震撼大奖。 “我昨天收到了这本书...
Head First Ajax 深入浅出Ajax 的源代码 这个系列一直都不错 可惜这本书截止目前还没有中文版本的 都是从官网下的代码 有中间的过渡代码和最终代码 注意第8章是没有代码的 所以评论的时候注意不要说缺少第8章之类的...
Head Rush Ajax,图文并茂生动的讲述ajax
在"深入浅出Ajax"这本书中,作者深入剖析了Ajax的工作原理、核心技术和实际应用场景,旨在帮助读者掌握这一关键技术。 **1. Ajax工作原理** Ajax的核心是JavaScript的XMLHttpRequest对象,它允许浏览器在后台与...
强烈推荐 ... 通过一连串的脑力开发,《深入浅出面向对象分析与设计》压缩了学习与获取复杂信息所需的时间。可以预料,这将是一段充满乐趣的学习之旅。相信在读完本书之时,你肯定能够写出伟大的软件。
Head.First-深入浅出面向对象分析与设计-中文.part04
Head.First-深入浅出面向对象分析与设计-中文.part05
深入浅出-设计模式.part1.rar Head.First-Design.Patterns.深入浅出-设计模式.part2.rar 此文档是分批压缩上传的 请全部下载后一起解压 本书荣获2005年第十五届Jolt通用类图书震撼大奖。 “我昨天收到了这本书...
### Head First Ajax:深入浅出Ajax 高清原版 #### 重要知识点解析: ##### 1. 使用Ajax:为新一代打造的Web应用 (UsingAjax:WebAppsforaNewGeneration) - **传统网页与Ajax的区别**:传统的网页在用户与服务器...
通过此书,你将学习: 希望你的网络应用超越平庸进入Web 2.0时代...《深入浅出Rails》用最新的认知科学和学习理论打造多感官的学习体验,运用适合大脑工作方式的直观的格式编排,而不是令人昏昏欲睡的密密麻麻的文字。
Head.First-深入浅出面向对象分析与设计-中文.part01
Head.First-深入浅出面向对象分析与设计-中文.part08