ASP.NET MVC5 课程小结
本学期Web开发使用的MVC5框架,这是课程作业之课程知识点回顾,顺便拷贝一份在我的GP上。
Web程序设计课程知识点总结
第1周课程
名词解释
Web
Web服务是一种通过标准的Web协议提供服务的技术,目的是保证不同平台的应用服务可以互操作。
Web服务器
一般指网站服务器,服务器本身指计算机主机硬件,而web服务器本质上是一段运行在服务提供方主机上的计算机程序,可以处理浏览器等Web客户端的请求并返回相应响应。
浏览器
网页浏览器是一种从 web 获取和显示页面的程序,这些页面包括这些资讯资源可为网页、图片、影音或其他内容,并且可以让用户通过超链接访问更多页面。
主流网页浏览器有Mozilla Firefox、Internet Explorer、Microsoft Edge、Google Chrome、Opera及Safari。
网页
是一个适用于万维网和网页浏览器的文件,存放在世界某个角落的某一部或一组计算机中,可以经由网址(URL)来识别与访问,用户一般通过网页浏览器来阅读。
URL
统一资源定位符(*Uniform Resource Locator*),表示一个给定的独特资源在Web上的地址。这个资源可以是一个HTML页面,一个CSS文档,一幅图像,等等。
概念论述
Web工作原理
静态网页工作原理
(img)
动态网页工作原理
(img)
URL的工作原理
(img)
1网络协议部分:最常见的如HTTP/HTTPS协议,此外还有ftp,bt下载等其他协议。
2Web服务器域名(即网址)
3端口号(可不加,根据协议有默认的端口)
4服务器的路径。根据url类型的不同,可以分为两个类型
真实路径:URL可以指向静态的html网页,也可以是图床上的jpg图片,或者任意文件的下载链接,此时url需要指向该文件的名称+后缀名。
虚拟路径:一般不带文件后缀名,采用路由映射的方式,由一段服务端程序(路由)解析并映射到指定的位置。
Web请求与响应
(img)
用户首先通过浏览器发出Web Request,这其中可能经过了很多网络协议,如常见的HTTP,或者代理服务器SOCKS5协议。服务器端的网络端口监听程序接收到Web请求之后,进入服务器端的路由映射,唤醒对应的控制器等处理请求,处理完毕后返回生成的视图或者html或其他类型的文件,再次经过网络协议返回给用户端,这就是Web Response。
当数据返回浏览器时,浏览器有可能解析数据发现还有一些静态资源(如:css,jquery或者图片)时又会发起另外的请求,而这些请求可能会在CDN上,那么CDN服务器又会处理这个用户的请求。
最后,客户端与服务器断开,由客户端解释HTML文档,在客户端屏幕上渲染图形结果呈现给用户。
第2周课程 MVC
名词解释
MVC
即模型(Model)、视图(View)、 控制器(Controller)。MVC是软件开发时所使用的一种架构,是一种开发观念,是一种设计模式。它把应用切割成三个主要单元,强调关注点分离(Separation of Concerns , SoC)、 面向方面(侧面)的程序设计(Aspect-Oriented Programming , AOP)、简 化了复杂度、提高了可维护性、易于测试、易于分工。
- Model(模型)表示应用程序核心(比如数据库记录列表)。
- View(视图)显示数据(数据库记录)。
- Controller(控制器)处理输入(写入数据库记录)。
Model 模型
View 视图
Controller 控制器
(*这三个概念分别放在第5,6,7周详细叙述)网址路由
路由(Route)是指映射URL到处理程序的模式。在ASP.NET MVC中,所有用户请求都要先经过ASP.NET路由系统,才能找到控制器中对应的操作方法(Action Method)。
概念论述
MVC模型的处理过程
(img)
在MVC模式中,客户端首先通过URL(Universal Resource Locators, 统一资源定位符)向服务器发出请求(Request),服务器解析URL, 然后转到相应的控制器(Controller)进行处理,控制器处理后,再将 结果通过视图(View)返回到客户端,作为对客户端请求的响应 (Response)。
例:使用 _StudentController_ 来演示 MVC 模式的用法
(img)
其中经历了以下的过程。
public class MVCPatternDemo {
public static void main(String[] args) {
_//从数据库获取学生记录_
Student model = retrieveStudentFromDatabase();
_//创建一个视图:把学生详细信息输出到控制台_
StudentView view = new StudentView();
StudentController controller = new StudentController(model, view);
controller.updateView();
_//更新模型数据_
controller.setStudentName(“John”);
controller.updateView();
}
private static Student retrieveStudentFromDatabase(){
Student student = new Student();
student.setName(“Robert”);
student.setRollNo(“10”);
return student;
}
}
第3周课程 HTML
名词解释
HTML
超文本标记语言(HyperText Markup Language)定义了网页内容的含义和逻辑结构,常被用来构建和设计网页,是一种方便浏览器识别的标记语言。
“超文本”(hypertext)是指连接单个网站内或多个网站间的网页的链接。
“标记”(markup)注明了文本、图片和其他内容,以便于在 Web 浏览器中显示,如
XML (eXtensible Markup Language)
一种类似于HTML的标记语言,但不用预先定义tags,用户可以根据自己需要构建和扩充标记符号,用于表达、存储和传递数据与信息。XML已经是互联网上传输数据的事实标准,很多著名的语言如 RSS,SVG,XHTML都是以XML为基础的,例如,如果你用非RSS阅读器打开RSS链接就会看到类似XML的源码文件。
XHTML
是W3C制定的“遵循XML规范”的 HTML严格规范,使用DOCTYPE元素指定所遵循的标准,一般来说,XHTML = HTML + XML。
DHTML
指动态(Dynamic)的HTML,DHTML=HTML + CSS + JavaScript。
CSS确定了信息的外在表现形式,JavaScript则用于编程动态操控CSS和HTML。
元素 Elements
HTML文档由元素(element)构成,元素由一对标签表示,遵循一定的格式,例如:
白日依山尽,黄河入海流。
属性
元素可以拥有一个或多个属性, 例如
XHTML规范
标签名称必须小写
属性名称必须小写,属性值用双引号括起来
标签必须严格嵌套
标记必须严格配对,即使是空元素也得封闭
XHTML区分“内容标签”与“结构标签” ,结构标签不要嵌入到内容标签内
概念论述
浏览器解析HTML
浏览器是一个HTML的显示器,它阅读HTML 网页,并解释其含义,然后将解释结果显示在屏幕上。
HTML的使用
文档头与文档体
<!DOCTYPE html>
<html xmlns=”http://www.w3.org/1999/xhtml"**>**
<meta content=”text/html; charset=utf-8”/>
标题与段落
- ~ 表示标题
- 表示自然段。
- 换行
- 分隔线
- 注释
- 转义字符(  ……)
图像
虽然图像的格式也可以在img标签中指定,但是使用CSS仍是最佳途径。链接
使用标签指向另一网页的链接。
LINK DENOTION TEXT
锚:本页面某个特定位置的定位超链接
<h3 id=”intro”>Introduction</h3> <a href=”#intro”>Introduction</a>列表
无序列表- <-->有序列表
- , 列表与列表之间有包含关系的,还可以嵌套使用,例如:
**
- **
**
- **first item** ** **
- **second item
**
- **
**
- **second item first subitem** ** **
- **second item second subitem unordered list! -->
**
- **
**
- **second item second subitem first sub-subitem** ** **
- **second item second subitem second sub-subitem** ** **
- **second item second subitem third sub-subitem** ** **
- **second item third subitem** </ul> </li>
- **third item** </ul>**
浏览器输出如下所示:
··· - first item
- second item
- second item first subitem
- second item second subitem
- second item second subitem first sub-subitem
- second item second subitem second sub-subitem
- second item second subitem third sub-subitem
- second item third subitem
- third item
···表格
- 表格标签
- 表格标题标签
- 表格头部标签
- 表格主体标签
- 表格尾部标签
- 表格行标签
- 表格单元格标签
- 让单元格跨越多列或多行:使用单元格属性colspan、rowspan
- 展示:
- 添加了 thead, tfoot, 和 tbody的表格</p>
Header content 1</th> Header content 2</th> </tr> </thead> Footer content 1</td> Footer content 2</td> </tr> </tfoot> Body content 1</td> Body content 2</td> </tr> </tbody> </table> - 输出如下:
- ···
- 添加了 thead, tfoot, 和 tbody的表格
- Header content 1
- Header content 2
- Footer content 1
- Footer content 2
- Body content 1
- Body content 2
- ···
- 关于表格的更多参数,请见:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/table
表单
- 表单提交: method=”post|get”
- 提交目标: action=”……”
- 数据输入框:
- 表单的基本用例展示:
- <form action=”” method=”get” class=”form-example”> <div class=”form-example”> <label for=”name”>Enter your name: </label> <input type=”text” name=”name” id=”name” required> </div> <div class=”form-example”> <label for=”email”>Enter your email: </label> <input type=”email” name=”email” id=”email” required> </div> <div class=”form-example”> <input type=”submit” value=”Subscribe!”> </div> </form>
- (img)
子页面
子页面已经不太使用,在现在的前端开发里面还有更多便捷的框架,故此处略去。多媒体
- 插入视频,如
- 插入音频,如
- 内嵌播放多个媒体
- <audio controls=”controls”> <source src=”audio1.mp3” type=”audio/mp3” /> <source src=”audio2.mp4” type=”audio/mp4” /> <source src=”audio3.ogg” type=”audio/ogg” /> </audio>
第4周课程 CSS
名词解释
CSS
CSS(Cascading Style Sheet,层叠样式表)是一种指定HTML文档视觉表现的标准。一般来说,CSS可单独作为一个引用文件或者插入html代码之中,目的是用统一规范的格式对某一类的HTML元素属性进行限定和修改。
HTML定义了文档的结构和内容,CSS则决定了浏览器以何种样式显示文档,这样,对于同样的HTML的原文档,使用不同的CSS进行渲染就可以得到风格各异的网页页面,体现了“信息结构与表现形式相分离”的基本原则。特点
- 代码重用提升开发效率;
- 选择器功能强大;
- 灵活轻便;
- 浏览器与开发工具广泛支持。
CSS盒子模型
是一种便于使用者理解CSS布局的模型。具体来说,当对一个文档进行布局(lay out)的时候,浏览器的渲染引擎会根据标准之一的 CSS 盒子模型(CSS basic box model),将所有元素表示为一个个矩形的盒子(box)。CSS 决定这些盒子的大小、位置以及属性(例如颜色、背景、边框尺寸)。
概念论述
CSS盒子模型的结构
(img)
每个盒子由四个部分组成,其效用由它们各自的边界(Edge)所定义。如图,与盒子的四个组成区域相对应,每个盒子有四个边界:_内容边界_ _Content edge_、_内边距边界_ _Padding Edge_、_边框边界_ _Border Edge_、_外边框边界_ _Margin Edge_。使用方法
- 行内式:在HTML标签的style属性中编写CSS代码 n嵌入式:在中编写CSS代码。
- 导入式:使用@import指令——很少用
- <style type=”text/css”> div { background-color: whitesmoke; } @import “mystyle.css”; </style>
- 链接式:使用链接外部CSS文件:
CSS样式规则
p { attribute: value; }
p代表选择器,大括号里面是一条条属性与值的声明。CSS选择器
基本选择器
- 通用选择器 * { }
- Tag选择器 p { }
- Class选择题 .className { }
- ID选择器 #idName { }
- 属性选择器 [attributeName=”value”] { } 例如 div[class=”light”] { … }
分组选择器(Grouping selectors)
交集 p.special { … } p#footer { … }
并集:A, B ,例如div, .special, #footer { … }组合器(关系选择器)(Combinators)
- 后代组合器(Descendant combinator)
- (空格)组合器选择前一个元素的后代节点。 语法:A B 例子:div span 匹配所有位于任意 [``] 元素之内的 [``] 元素。
- 直接子代组合器(Child combinator)
- > 组合器选择前一个元素的直接子代的节点。 语法:A > B 例子:ul > li 匹配直接嵌套在 [``] 元素内的所有 [``] 元素。
- 一般兄弟组合器(General sibling combinator)
- ~ 组合器选择兄弟元素,也就是说,后一个节点在前一个节点后面的任意位置,并且共享同一个父节点。 语法:A ~ B 例子:p ~ span 匹配同一父元素下,[``] 元素后的所有 [``] 元素。
- 紧邻兄弟组合器(Adjacent sibling combinator)
- + 组合器选择相邻元素,即后一个元素紧跟在前一个之后,并且共享同一个父节点。 语法:A + B 例子:h2 + p 会匹配所有紧邻在 [``] 元素后的 [``] 元素。
- 列组合器(Column combinator)
- || 组合器选择属于某个表格行的节点。
语法: A || B
例子: col || td 会匹配所有 作用域内的 [`] 元素。
伪选择器(Pseudo)
伪类 : 伪选择器支持按照未被包含在文档树中的状态信息来选择元素。 例子:a:visited 匹配所有曾被访问过的 [``] 元素。
伪元素 \:: 伪选择器用于表示无法用 HTML 语义表达的实体。 例子:p\::first-line 匹配所有 [``] 元素的第一行。CSS属性与值
值的继承
大部分会自动从父元素继承大小单位
px 表示像素; em 是一个相对单位,表示跟标准值的相对比例。
另外,还可以以百分比的形式来定义长宽。CSS颜色
以十六进制数(#fff、#ffffff)表示,每一位或两位表示红、绿、蓝三原色的色值,#ffffff表示纯黑,#000000表示纯白。
第5周课程 MVC-V
名词解释
View视图
View(视图)是MVC中的V,是经过控制器结合模型数据之后,呈现给用户的界面,可以显示数据或数据库记录。
Views 文件夹
Views 文件夹用于存储与应用程序的显示相关的 HTML 文件(用户界面)。Views 文件夹中包含每个控制器对应的一个文件夹。
- Account 文件夹包含用于用户账号注册和登录的页面。
- Home 文件夹用于存储诸如 home 页和 about 页之类的应用程序页面。
- Shared 文件夹用于存储控制器间分享的视图(母版页和布局页)。
View与HTML,CSS的关系
View主体是由HTML书写View的类型
常规视图
部分视图
一般是小块的代码,与布局视图相反。一般作为附加成分嵌入其他视图。有两种类型,一种是跟控制器对应的,另一种是不与控制器对应的。布局视图
与部分视图相反,作为布局被广泛的引用和插入进大部分的页面。Razor
Razor是服务器端的标记语言,可以将基于服务器的代码(Visual Basic 和 C#)嵌入到网页中。
基于服务器的代码可以在网页传送给浏览器时,创建动态 Web 内容。当一个网页被请求时,服务器在返回页面给浏览器之前先执行页面中的基于服务器的代码。通过服务器的运行,代码能执行复杂的任务,比如进入数据库。强类型
强类型的html帮助器,即带for的如Html.TextBoxFor(),其使用 lambda 表达式来引用传到视图模板中的模型或视图模型。
概念论述
Razor C# 语法规则
Razor 代码块包含在@{ … } 中,内联表达式(变量和函数)以 @ 开头,代码语句用;结束,变量使用 var 关键字声明,字符串用引号括起来,C# 代码区分大小写,扩展名是 .cshtml, 例如:
@{ var myMessage = “Hello World”; }The value of myMessage **is**: @myMessage
@{ var greeting = “Welcome to our site!”; var weekDay = DateTime.Now.DayOfWeek; var greetingMessage = greeting + “ Here in Huston it is: “ + weekDay; }The greeting **is**: @greetingMessage
Razor语句块
一系列的语句,用大括号组成组。例如:
@{ Layout = null; string temp = “var test———“; }Razor语句
单独的语句,例如@model LoginViewModel
Razor表达式
放在html tag里面,呈现内容。例如:
<h3>@(ViewBag.Message)</h3> //注意,插入文字中间的时候加括号。数据获取
- 方法一:从控制器获得
强类型Model Object
例如:@model Razor.Models.Product
由控制器从模型中提取数据库的数据,再作相应的处理如类型转换后传递给视图。例如return View(db.ASPnetUser.toList())ViewBag对象
ViewBag是动态对象,其属性可以由用户自定义,如 .Message
ViewBag没有错误检验,在Debugging的时候不易发现。
例如ViewBag.Message =”your message” //写在controller的某个Result里面
然后在对应的View页面中直接在tag 例如<h3>@ViewBag.Message </h3>中利用razor引用即可。 - 方法二:自己操作模型(略)
HTML 帮助器
由Html类(对象)衍生出来的一系列方法,实际上是html类的static method(静态方法)。
Html.actionLink()// 产生一个超链接
Html.actionLink(“Create new User”, “Create”)=Create new User
其他的帮助器例如: @using(Html.BeginForm()) { …… } @Html.CheckBox() @Html.RadioButton() @Html.Hidden() @Html.Password() @Html.TextArea() @Html.TextBox() @Html.DropDownList() @Html.ListBox() @Html.ActionLink() @Html.RouteLink(),
强类型的后面加for,如Html.TextBoxFor(),其各自的功能可以去官方文档查看。强类型的说明
强类型的html帮助器,即带for的如Html.TextBoxFor(),其使用 lambda 表达式来引用传到视图模板中的模型或视图模型。
_注:Lambda表达式参见C#文档。_
这样做有一些好处:
促成更好的编译时视图检查(可以在编译时发现缺陷,而不是在运行时),还可以促成视图模板中更好的代码intellisense支持。
比如 之前的写法是直接传入模型里的值
Html.TextBox(“Product Name”, Model.ProductName)
它会生成如下的HTML代码
使用Html.TextBoxFor()之后,只需写入
Html.TextBoxFor(Model => Model.ProductName)//也不需要指定“ProductName”的id了Url帮助器
由Url对象衍生出来的一系列方法。如
@Url.Content(“~/Content/Site.css”)
@Url.Action()
@Url.RouteUrl()
具体的使用方法详见ASP.NET MVC的官方文档。
第6周课程 MVC-C
名词解释
控制器 Controller
Controller(控制器)是应用程序中处理用户交互的部分。 通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据,或者与之相反,从模型中抽取数据,传递给视图,再生成网页发送给用户。
Controllers 文件夹
Controllers 文件夹包含负责处理用户输入和响应的控制器类。
MVC 要求所有控制器文件的名称以 “Controller” 结尾。ActionResult类:Action的返回值
ActionResult是控制器返回值类型的基类,其余的常见返回值都是继承于ActtionResult类(*详见Microsoft文档)。
如Public ActionResult Index() { return View()}
实际上,视图的返回类型是ViewResultBase,它返回HTML内容。- 注意:View()函数默认返回与方法名相同的视图。
又如Content() 与ContentResult对应,返回一个字符串或其他文字内容。 - 注意:controller返回的内容不一定是网页。
查询字符串
附属在url后方的一串代码,用于向http服务器传递参数,在控制器中可以使用。
如:…/endOfPath?a=5&b=4状态管理
由于HTTP协议的无状态特性,导致在ASP.NET编程中,每个请求都会在服务端从头到执行一次管线过程, 对于ASP.NET页面来说,Page对象都会重新创建,所有控件以及内容都会重新生成, 因此,如果希望上一次的页面状态能够在后续页面中保留,则必需引入状态管理功能。Cookie
Cookie 是一小段文本信息,它的工作方式就是伴随着用户请求和页面在 Web 服务器和浏览器之间传递。Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息,应用广泛,如保持用户的登录状态。
(计算机网络课程讲过,HTTP协议是无状态的,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大)
为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,所以Cookie使得基于无状态的HTTP协议记录稳定的状态信息成为了可能。Session
Session称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。
Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。Application
采用HttpApplication State实现的状态维持方式。
Application.Lock(); Application[“PageRequestCount”] = ((int)Application[“PageRequestCount”]) + 1; Application.UnLock();概念论述
从请求获取数据——常用属性与对象
Controller是可以从请求获取数据来传递给视图的。这一过程使用到了很多对象。Request对象
request对象有这些作用:读取浏览器信息、表单数据、查询字符串、Cookie。
request对象可以从URL上获得数据。
Request.Form[“name”]
Request.QueryString[“name”]// URL的查询字符串储存在这里。Response对象
response对象可以:下载文件、页面跳转、创建Cookie。Server对象
- 可以掌管url逻辑路径到服务器实际路径的路由映射。
MapPath、Transfer、HtmlEncode/Decode、UrlEncode/Decode(编码解码)
如:
String temp = Server.MapPath(“~/Images”)
//此处temp的返回值即该Images文件在本机上的实际路径。 - 也可用于:URL重定向
URL重定向本身可以用response跳转,即ActionResult中的RedirectResult类。
该过程是将重定向的请求返回到客户端,由客户端重新发起一个重定向的请求。
而Server的重定向过程可以直接在服务器端跳转,客户端程序不知晓中间是否发生了重定向。
!注意两者的区别HttpContext对象
ViewData/ViewBage/TempData对象
状态管理
Cookie
保存数据到Cookie中
HttpCookie c = new HttpCookie(“LastVisit”); c.Value = DateTime.Now.ToString(); Response.Cookies.Add(c); Response.Cookies[“键名”] = 键值
从Cookie中取出值
变量 = Request.Cookies[“键名”]
Cookie过期
c.Expires = DateTime.Now.AddDays(7);Application
保存到Application对象中
HttpContext.Application.Lock(); HttpContext.Application[“Name”] = Value HttpContext.Application.UnLock();
从Application对象中取出值
变量 = HttpContext.Application[“Name”]
去除Cookie
HttpContext.Application.Remove(“键名”)Session
保存到Session对象中
Session[“Name”] = “Value”
从Session对象中取出值
变量 = Session[“Name”]第7周课程 MVC-M
名词解释
Model 模型
Model是MVC中的M。模型代表一个存取数据的对象。它也可以带有逻辑,在数据变化时更新控制器。分类
与数据库的表相对应的模型
模型中的变量与其关联的数据库的字段一一对应,可以用来操作对应的数据库。
例如:User(Id, LoginName, Password, RealName, Gender, Birthday, Address, Zipcode, Email, Mobile, CreateAt)与视图对应的模型
模型中的变量与生成的视图中的
在视图的首行插入
@using WebApplications1.Models
来使用对应的模型。
又如:login页面的login操作
Tasklogin(LoginViewModel model, string returnurl)
也用到了LoginViewModel模型作为其参数来验证用户输入。
这样的模型例如:LoginModel(UserName, Password,
RememberMe)、RegisteModel(UserName, RealName, Email, Password, ConfirmPassword)CSharp语言的特性
特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。
通过使用特性可以向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。
例如:
public class LoginViewModel{ [Required] [Display(Name=”Email”)] [EmailAddress] public string Email { get; set;} }
关于特性的其他信息,详见https://www.runoob.com/csharp/csharp-attribute.htmlLINQ
Language Integrate Query,即语言集成查询。
LINQ是一组语言特性和API,使得你可以使用统一的方式编写各种查询。用于保存和检索来自不同数据源的数据,从而消除了编程语言和数据库之间的不匹配,以及为不同类型的数据源提供单个查询接口。
LINQ总是使用对象,因此你可以使用相同的查询语法来查询和转换XML、对象集合、SQL数据库、ADO.NET数据集以及任何其他可用的LINQ提供程序格式的数据。概念论述
访问数据库
使用SQL server。详细操作过程叙述不易,可以见回放视频。第8周课程 MVC联合
(本周应用类课程,相应的知识点总结在了前面几周,故此处略过)第9周课程 JS
名词解释
JavaScript
JS是一种高级的、解释型的编程语言,也是浏览器端的编程语言,大部分现代的 HTML 页面都使用 JavaScript。总的来说,JS是可插入* HTML 页面的编程代码,插入 HTML 页面后,可由所有的现代浏览器执行,其目的是利用代码操控html页面上的元素及其样式,对事件作出响应,让网页产生更多的功能。
JavaScript = ECMAScript(核心)+DOM+BOM
一般来说,JS运行在浏览器上,但目前JS已经可以被即时编译执行,还可用于游戏、桌面和移动应用程序的开发和在服务器端网络环境运行,最大的例子就是我们常用的npm包管理器的编写语言Node.js。JavaScript代码解析过程
流式解析
可定义函数
函数体外的语句直接执行(执行时可调用函数)事件驱动
当发生某些事件时执行弱类型编程语言
指不需要变量声明,可以给变量赋予不同类型的值的编程语言。如JS就是弱类型的语言,如下的书写方式不会被编译器报错。
var Name = “Bill Gates”; Name = 123; Name = true;
这是因为Javascript
对应的还有强类型的语言,如C#,在使用变量之前不需要变量声明执行环境与作用域Scope
即变量的作用范围。JS没有块级作用域(Block Scope)HTML使用JavaScript的方式
- 利用 tag
- 放在外部文件,在html中引用。
- 在HTML元素的事件上调用函数执行
概念论述
Javascipt语法规则
操作符
- 算术操作符(+,-,*,/,%,++,—)
- 位操作符(~,&,|,^(XOR),<<,>>,>>>)
- 布尔操作符(!,&&,||)
- 关系操作符(<,>,<=,>=,==,!=,===)
- 赋值操作符(+,-,,/,%,<<,>>,>>>与等号结合)
- 三元运算符(x = x>0 ? x : -x ; //绝对值)
数据类型
typeof与instanceof
typeof(): 返回变量的类型,可以是primitive types, 也可以是object或者function。
instanceof(): 判断一个变量是不是某一个构造方法的实例,返回值是布尔类型。数字类型
int,float等基本数据类型与其他语言大体相同。
被零除时返回Infinity或-Infinity
非数字显示NaN
数字类型对应的Wrapper类型是Number文本类型
字符串:用’’或””引用起来的序列,其中,转义序列用\()表示。
str.length 储存了字符串的长度;
str1 + str2,str1.concat(str2) 可以将两个字符串连接起来;
str.CharAt(0) 可以选定指定位置的字符;
str.IndexOf(“abc”),lastIndexOf 可以查找子字符串;
str.substring(SttP,EndP) 相应地可以根据index提取子串。
模式匹配, 可以采用正则表达式,具体与Java相仿。数据类型的转换
- 转换为字符串
var num = 123; var str = num.toString(); - 转换为数字,主要是以parse函数来解析字符串。
var i = parseInt(“123”); var f = parseFloat(“123.45”); - 强制类型转换,利用括号内的指定来转换。
Boolean(value),Number(value),String(value) - 隐式类型转换,即可以自动转换。
(”123” + 456)日期类型
UTC(Coordinated Universal Time)
指1970/1/1 0:0:0 之前可或之后经过的毫秒数(精度约285616年)
var now = new Date(); _//自动获得当前日期与时间 _ var date1 = new Date(“5/25/2004 12:28:48”); var date1 = new Date(“May 25, 2004”); var date1 = new Date(Date.parse(“May 25, 2004”)); var date1 = new Date(Date.UTC(2015, 4, 5, 3, 2,55));数组
数组可按照如下方式定义
var a = new Array(); var primes = [2, 3, 5, 7, 11]; var a = new Array(10); var misc = [1.1, true, “str”]; var a = new Array(5, 4, 3, “str1”, “str2”); var empty = [];
数组元素的访问: a[i]// 第一个的下标是0函数
定义与调用
- 函数声明,例如function sum(num1, num2) { return num1 + num2 ; },可以先使用后声明。
- 函数表达式,例如var sum = function(num1, num2) { return num1 + num2 ; };, 只能先声明后使用。
- 函数对象,例如var sum = new Function(“num1”, “num2”, “return num1 + num2”);, 只能先声明后使用。
注意:
- 函数必须先定义后使用(一般在中)。
- 函数定义好之后,并不会自动执行,必须有一个明确 的调用语句。
- 对于被调用的函数,其定义必须放在调用语句前面。
return语句
对于带有类型的函数,函数的运行必须要必须以return相应的类型来结束;
void类型的函数不带有return。函数的参数
- 形参的命名与实参不必完全一致。
- 由于参数的灵活性,JavaScript函数没有重载(overload)。
- JS参数的传递是“pass by value”,是值传递,即拷贝相应变量所占位址上的所有bits作为参数传递到函数里面。因此,在函数中改变primitive类型的参数,被传入的函数外的变量值不会改变,而改变对象的属性的话,由于函数中也是调用的该对象同样的地址,所以对象的属性会发生变化。
- arguments对象:传递的参数列表本身也是一个JS对象,具有对象的特征。
- • 当成一个数组来使用(arguments.length、arguments[i])
- • callee属性——指向拥有arguments对象的函数
函数的属性与方法
- this属性: 函数以执行的对象(执行时所处的作用域)
- windows.color = “red”; var o = { color : “blue” } function sayColor() { alert(this.color); } sayColor(); o.sayColor = sayColor; o.sayColor(); _//red_ _//blue_
- length属性: 希望接收的命名参数的个数
- function sayName(name) { alert(name); } function sayHi() { alert(“hi”); } function sum(num1, num2) { return num1 + num2;; } alert(sayName.length); _//1_ alert(sayHi.length); _//0_ alert(sum.length);_//2_
- apply()方法: 在特定的对象上调用函数
- 第一个:运行函数的对象;第二个:参数数组(或arguments对象)
- windows.color = “red”; var o = { color : “blue” } function sayColor() { alert(this.color); } sayColor();_//red_ o.sayColor = sayColor; o.sayColor();_//blue_ sayColor.apply(this);_//red _ sayColor.apply(windows);_//red_ sayColor.apply(o); _//blue_
- call()方法: 在特定的对象上调用函数
- 第一个:运行函数的对象;其余参数:直接一个个列出传入
- windows.color = “red”; var o = { color : “blue” } function sayColor() { alert(this.color); } sayColor();_//red_ sayColor.call(this);_//red_ sayColor.call(windows); _//red_ sayColor.call(o);_//blue_
- prototype属性: 保存其所有实例方法的真正所在
- 函数的嵌套:内部与外部函数
闭包
- 内部函数在定义它的作用域的外部被引用时,创建该内部函数的一个闭包。
- 闭包会携带包含它的函数的作用域(但只是每个变量的最后一个值),因此会比其它函数占用更多的内存。
- 闭包中的this总是指全局对象(window),可通过call或apply改变。
OOP(面向对象程序设计)
对象类型
对象:实质上Name-Value对的集合,可以拥有自己的类的实例方法,与java对象类似。创建对象
如:
var point = { x : 0 , y : 0 } ; point.x = 100 ; var book = { } ; var book = new Object() ; Var book = null ; book.name = “JavaScript编程” ;对象的使用
o.p, o[“p”] // 后一种为引用对象的属性名。属性的检测
o.hasOwnProperty(“p”)预定义方法
所有的JS对象类型都拥有以下两种方法。
toString() 转换为字符串类型,返回对象的字符串表示。
valueOf()) 返回指定对象的原始值,如Array类型的对象,数组的元素被转换为字符串,这些字符串由逗号分隔,连接在一起。其操作与 Array.toString 和 Array.join方法相同。构造方法 Constructor
constructor是一种用于创建和初始化创建的对象的特殊方法。
语法为function ([arguments]) { … }动态原型模式
动态原型模式是由构造函数和原型模式组合而成的.
JS的构造函数如下:
function Box(){ this.name:’bigBox’; this.boxs = [“box1”, “box2”, “box3”]; };
_//JS的 原型模式如下_ function Bar(){}; Bar.prototype = { constructor:Box, age:100, call:function(){ alert(‘your age is’ + this.age) } }
_// 将构造函数与原型模式写到一起之后_ function Box(){ this.name:’bigBox’, this.boxs = [“box1”, “box2”, “box3”]; if(typeof this.run != ‘function’){ Box.prototype.num = function(){ console.log(this.boxs.length); } } }
构造函数执行时,里面的代码都会执行一遍,而原型有一个就行,不用每次都重复,所以仅在第一执行时生成一个原型,后面执行就不必在生成,所以就不会执行if包裹的函数,使用构造函数其实是把new出来的对象作用域绑定在构造函数上,而字面量的写法,会重新生成一个新对象,就切断了两者的联系,因此不能使用字面量。
动态原型模式就是把共享的对象的使用原型,不共享对象的使用构造函数。Global对象
Global对象是终极兜底的对象,实际上,所有的全局函数(isNaN, isFinite, parseInt, parseFloat)和全局属性都是属于该对象的,在浏览器中是作为window对象的一部份实现的。下面是一些例子: - eval()方法
- 特殊值(undefined, NaN, Infinity)
- 所有的引用类型实际上都是构造函数(一种特殊的函数),例如:Object, Array, Date, RegExp,, Function, Boolean, String, Number, Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError
第10周课程 BOM/DOM
名词解释
BOM
浏览器对象模型(Browser Object Model)提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window(窗口)。
BOM最初是Netscape浏览器标准的一部分,但缺乏标准,没有 specification。如JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3C。Window对象
所有浏览器都支持 window 对象。它表示浏览器窗口。所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。全局变量是 window 对象的属性,全局函数是 window 对象的方法,甚至 HTML DOM 的 document 也是 window 对象的属性之一。
DOM
文档对象模型(Document Object Model) 是HTML和XML文档的编程接口。DOM 用一个逻辑树来表示一个文档,树的每个分支的终点都是一个节点(node),每个节点都包含着对象(objects),这样,将 web 页面与到脚本或编程语言连接起来。
DOM选择器 ( Selector)
- ID: var div1 = document.getElementById(“div1”);
- Name: var radios = document.getElementsByName(“fColor”);
- Tag/ Class Name: var spans = document.getElementsByTagName(“span”);
- 快捷属性,例如images、forms
- CSS选择器: document.querySelector(“ “) , var elementList = document.querySelectorAll(“……”);
- document.all对象
概念论述
Window对象及其使用
window 对象表示浏览器窗口。所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。全局变量是 window 对象的属性,全局函数是 window 对象的方法,甚至 HTML DOM 的 document 也是 window 对象的属性之一。
窗口大小与位置
- moveBy(dx,dy),
- moveTo(x,y),
- resizeBy(dw,dh),
- resizeTo(x, y)
- screenLeft, screenTop
- innerWidth, innerHeight
窗口的打开关闭
- open(URL, name, features, replace)// 打开;用例如下
var win = open(“http://www.zju.edu.cn“, “pop”, “height=300,width=400”); alert(win.operner == window); _//true;_ - close();关闭 用例如下
win.close(); alert(win.closed); _//true_计时器
- 超时调用
function f() {……} var timeoutID = setTimeOut(f, 100) clearTimeOut(timeoutID) - 间歇调用
function f() {……} var intervalID = setInterval(f, 100) clearInterval (intervalID) - 可使用超时调用来模拟间歇调用
系统对话框
alert(“…………”) //最常使用
confirm(“…………”)//弹出对话框并
if (confirm(“Are you sure?”)) { alert(“I’m so glad you’re sure!”); } else { alert(“I’m sorry to hear you’re not sure!”); }
prompt() //弹出对话框并收集用户输入。
var result = prompt(“What is you name?”, “John’); if(result != null) { alert(“Welcom, “ + result); }window属性
- location属性
- href—— 完整的URL
- host——服务器名和端口号
- hostname——服务器名
- port——端口号
- protocol——协议
- pathname——目录与文件名
- search——查询字符串
- assign(URL)等价于直接给href赋值
- reload()——刷新页面
- navigator属性:识别客户端浏览器的实际标准
- screen属性
- history属性
DOM模型与节点模型
(img)
DOM之中,整个文档是一个文档节点,每个HTML元素都是元素节点,每个HTML属性是属性节点,树中的每一个节点都可以通过Javascript访问。
节点之间还存在着关系,如父子节点,同级节点等。顶端节点被称为根(root),每个节点都有父节点、除了根(它没有父节点),同胞是拥有相同父节点的节点。节点遍历
(img)作为节点树的文档
(使用Node的属性)
parentNode、childNodes、firstChild、 lastChild nextSibling、previoursSibling: nodeType:节点类型:1Element、3Text、9Document nodeValue:只是Text和Comment节点,表示文本内容 nodeName:元素的标签名,以大写形式表示 hasChildNodes():只要有一个子节点,就返回true ownerDocument:指向表示整个文档的文档结点
使用方式:
aNode.childNodes[0]
aNode.childNodes.item(1)
aNode.childNodes.length
document.firstChild. firstChild.nextSibling作为元素树的文档
(不包括Text和Comment节点)(使用Element属性)
parentElement、children、childElementCount: firstElementChild、 lastElementChild: nextElementSibling、previoursElementSibling: tagName:等于nodeName innerHTML :元素内容 outerHTML :元素及内容DOM操作
操作属性
HTML属性作为Element属性
var f = document.forms[0]; f.action = “http://www.baidu.com“; f.method = “POST”;
命名规则:一般用小写,多个单字后面的单字首字母大写; 与保留字冲突加前缀html(如htmlFor);class => className 属性的值是有类型的(字符串、布尔值、数值、对象)非标准HTML属性
var image = document.images[0]; var imgwidth = parseInt(image.getAttribute(“WIDTH”)); image.setAttribute(“class”, “thumbnail”); _//HTML元素的属性名不区分大小写_ _//这两个方法的返回值与参数都是字符串_
其他的方法举例:hasAttribute()、 hasAttribute(“value”)、 removeAttribute(“AttributeName”)。数据集属性
任何以data-为前缀的小写的属性名字都是合法的。
Element对象上定义了dataset属性,带连字符的HTML 属性,去掉data-前缀,形成以驼峰法命名的元素属性。
如:data-x => dataset.x
data-jquery-test => dataset.jqueryTest只读实时的attributes属性(每个Attr对象)
Attr对象的 name和value属性返回该属性的名字与值 document.body.attributes[0] _//body元素的第一个属性 _ document.body.attributes.bgcolor _//body元素的bgcolor属性 _ document.body.attributes[“onload”] _//body元素的onload属性_操作元素的内容
内容的界定:(开始标记与结束标记之间的东西)
- innerHTML属性
- outerHTML属性(包含敢开始与结束标记) 当设置outerHTML属性时,元素本身也被替换
- Node的textContent属性 针对纯文本的元素(如)
- Node的nodeValue属性
_针对Text节点的元素内_ - insertAdjacentHTML(“内容”, “位置”)方法
_位置值:beforebegin/afterbegin/beforend/afterend_操作CSS
- style元素属性是CSSStyleDeclaration对象
_与数据集属性一样:带连字符的CSS属性,要改写成以驼 峰法命名的style属性,属性的值是字符串。如属性名是 关键字,则加css前缀。例如元素e的操作如下:_
*e.style.fontSize = “24pt” ; //font-size *
_e.style.fontWeight = “blod” ; //font-weight_
* e.style.color = “blue” ; //color e.cssFloat = “right” ;* - 整个样式作为字符串操作
e.setAttribute(“style”, s);
S = e.getAttribute(“style”);
e.style.cssText = s; s = e.style.cssText; - 计算样式
window.getComputedStyle(e, null) - 操作元素的className属性
_HTML的class属性的值是用空格隔开的类名_ - 操作元素的classList属性
_classList属性的值是DOMTokenList对象,我们只能用它 定义的方法来操作:add()、remove()、toggle()(如果 不存在类名就添加;否则,就删除它)、contains()(检 测是否包含指定的类名)_文档和元素的几何操作
- 从抽象的节点树到渲染文档时的视觉表现层
- 文档坐标与视口坐标(相差滚动的偏移量)
window.pageXOffset和window.pageYOffset属性 document.documentElement.scrollLeft/scrollTop属性 - 查询元素的几何尺寸(视口的)
var box = e.getBoundingClientRect();
var w = box.width || (box.right – box.left);
var h = box.height || (box.bottom – box.top);
内联元素可用getClientRects()方法(返回多个box) - 获得在某点(视口)的元素(最里面最上面)
var e = document.elementFromPoint(x, y) - 滚动(scrollTo()、scrollBy()、scrollIntoView())
操作表格
- 核心DOM方法操作表格的复杂性
- table元素的属性与方法
caption、tBodies、tFoot、tHead、rows createTHead、createTFoot、createCaption deleteTHead、deleteTFoot、deleteCaption deleteRow(pos)、insertRow(pos)、moveRow(m, n) - tbody元素的属性与方法 rows、deleteRow(pos)、insertRow(pos)、moveRow(m, n)
- tr元素的属性与方法
cells、deleteCell(pos)、insertCell(pos)、moveCell(m, n)动态修改网页
- 创建
document.createElement(“div”)//返回一个div元素
文档的createTextNode()、节点的cloneNode() - 插入( Node方法)
parentEle.appendChild(childEle)
parentEle.insertBefore(childEle, otherChildEle/null) - 删除和替换
parentNode.removeChild(n)
parentNode.replaceChild(newElement, n) //用innerHTML属性
第11周课程 事件驱动编程
名词解释
事件驱动
事件
页面对不同访问者的响应叫做事件,事件是用户可浏览器自身执行的某种动作,如click表示点击, mouseover表示鼠标停留等等。
对于事件,可以使用jQuery库来便捷处理。事件处理程序
指响应某个事件的函数。一般来说,对应的属性名on + 事件名(如:click ==> onclick)。
事件对象
在触发事件时会产生一个事件对象event,其包含与事件有关的各种信息,并作为参数传入事件处理程序。
事件对象的常用属性和方法如下表所示。
属性/方法
类型
说明
bubbles
Boolean
事件是否冒泡
cancelable
Boolean
事件是否可以取消其默认行为
currentTarget
Element
事件处理程序正在处理事件的那个元素
detail
Integer
有关事件的详细信息
eventPhase
Integer
所处阶段:1捕获、2处于目标、3冒泡
preventDefault()
Function
取消事件的默认行为,cancelable必须是true
stopPropagation()
Function
取消事件的传播,bubbles必须是true
target
Element
事件的目标元素
type
String
被触发的事件类型(事件名)表单
HTMLFormElement
概念论述
事件流
事件处理程序
- HTML内联绑定事件处理程序
- DOM0级绑定事件处理程序(冒泡)
btn.onclick = 函数 ;
btn.onclick = null ; - DOM2级绑定事件处理程序
btn.addEventListener//true捕获(“事件名”,函数,布尔值) btn.removeEventListener //false冒泡(“事件名”,函数,布尔值) - 事件处理程序中的this指的是当前元素
表单操作(HTMLFormElement)
表单提交
<input type=”submit” value=”Submit” /> <input type=”image” src=”submit.png” /> <button type=”submit”>Submit</button>
拥有焦点的表单,如有提交按扭,按回车键会自动提交 可用代码提交表单(myForm.submit()),但这不会触发submit事件.重置表单
<input type=”reset” value=”Reset” /> <button type=”reset”>Reset</button>
可用代码重置表单(myForm.reset()),会触发reset事件表单元素
每个表单有一个elements属性,作为元素的引用。
var f1 = myForm.elements[n] var f2 = myForm.elements[“textbox1”]
如多个元素使用同一个name(如单选按扭),则返回的是NodeList 表单提交时会把元素的名值对(name=value&name=value)发往服务器
表单元素的属性有:disabled、form、name、readonly、tabIndex、type、value;
方法有:focus()、blur()
事件有:focus、blur
和change(对于文本输入框,在它们失取焦点,且value值改变时,才会触发; 对于select元素,只要选了不同的选项,不失取焦点就触发)文本输入框
- value属性值:文本输入框中的内容。
- placeholder属性:可指定输入前的提示
- size:指定文本框显示的字符数
- maxlength:指定文本框可输入的字符数
- textarea:指定rows和cols属性
- _如type=”password”,用户输入显示为星号_
- select()、setSelectionRange()
- selectionStart/End属性
复选按扭
- 本身没有任何文本显示(value属性不起作用)
- checked属性与defaultChecked属性
- 只是选中的name=value发送到服务器
- 鼠标单击时会触发click事件
- 如果由于单击改变了其状态,也会触发change
单选按扭
- 本身没有任何文本显示(value属性不起作用)
- checked属性与defaultChecked属性
- 只是选中的name=value发送到服务器
- name属性相同的为一组
- 鼠标单击时会触发click事件
- 如果由于单击改变了其状态,也会触发change
- 如果由于单击没有改变其状态,也不会触发 change,如果由于其它单选按扭的单击改变了 其状态,也不会触发change
操作选择框
- 由
- HTMLSelectElement还提供了以下属性与方法
multiple(布尔值);
options;
add(newOpt, relOpt);
remove(index);
针对单选:selectedIndex指定了当前被选中的选项;
针对多选:要遍历options中的每元素,检查其selected属性; - 选择或取消一个选项时,触发change事件
文件上传
- input元素的type为file
- 表单元素上要设置
enctype=”multipart/form-data” - 要想可以多选文件
input元素上要设置multiple=”multiple” - 选择文件后会触发change事件
- 检验上传文件的类形
客户端数据校验
- 表单提交 oncommit
- 文本框 onchange oninput onkeypress
第12周课程 AJAX
名词解释
Ajax
异步JavaScript和XML(Asynchronous JavaScript + XML).
它是创建动态网页应用的一种使用现有技术集合的‘新’方法, 包括: HTML or XHTML, Cascading Style Sheets, JavaScript, The Document Object Model, XML, XSLT, XMLHttpRequest object。Ajax能够快速地将增量更新呈现在用户界面上,无需重载网页,就能更新部分网页。
例如:谷歌搜索建议(Google Suggest) 使用 AJAX 创造出动态性极强的 web 界面:当用户在谷歌的搜索框中键入内容时,JavaScript 会把字符发送到服务器,服务器则会返回建议列表。XMLHttpRequest对象
概念论述
Ajax的工作过程和XMLHttpRequest对象的用法
Ajax通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。
要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。
XMLHttpRequest的属性有
onreadystatechange 每次状态改变所触发事件的事件处理程序。 responseText 从服务器进程返回数据的字符串形式。 responseXML 从服务器进程返回的DOM兼容的文档数据对象。 status 从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪) status Text 伴随状态码的字符串信息 readyState 对象状态值 0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法) 1 (初始化) 对象已建立,尚未调用send方法 2 (发送数据) send方法已调用,但是当前的状态及http头未知 3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误, 4 (完成) 数据接收完毕,此时可以通过通过responseXml和responseText获取完整的回应数据
创建XMLHttpRequest对象的方法
function CreateXmlHttp() { _//非IE浏览器创建XmlHttpRequest对象_ if (window.XmlHttpRequest) { xmlhttp = new XmlHttpRequest(); } _//IE浏览器创建XmlHttpRequest对象_ if (window.ActiveXObject) { try { xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”); } catch (e) { try { xmlhttp = new ActiveXObject(“msxml2.XMLHTTP”); } catch (ex) { } } } } function Ustbwuyi() { var data = document.getElementById(“username”).value; CreateXmlHttp(); if (!xmlhttp) { alert(“创建xmlhttp对象异常!”); return false; } xmlhttp.open(“POST”, url, false); xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) { document.getElementById(“user1”).innerHTML = “数据正在加载…”; if (xmlhttp.status == 200) { document.write(xmlhttp.responseText); } } } xmlhttp.send(); }
函数首先检查XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据服务器的设定询问请求状态,如果一切已经就绪(status=200),那么就执行下面需要的操作。
对于XmlHttpRequest的两个方法,open和send,其中open方法指定了:- 向服务器提交数据的类型,即post还是get。
- 请求的url地址和传递的参数。
- 传输方式,false为同步,true为异步。默认为true。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。我们需要根据实际需要来指定同步方式,在某些页面中,可能会发出多个请求,甚至是有组织有计划有队形大规模的高强度的request,而后一个是会覆盖前一个的,这个时候当然要指定同步方式。
Send方法用来发送请求。
(img)
对于Ajax,我们可以把服务器端看成一个数据接口,它返回的是一个纯文本流,当然,这个文本流可以是XML格式,可以是Html,可以是Javascript代码,也可以只是一个字符串。这时候,XMLHttpRequest向服务器端请求这个页面,服务器端将文本的结果写入页面,这和普通的web开发流程是一样的,不同的是,客户端在异步获取这个结果后,不是直接显示在页面,而是先由javascript来处理,然后再显示在页面。
XMLHttpRequest对象使用的详细过程
基本使用
var xhr = new XMLHttpRequest(); xhr.open(“get”, “Url”, false); _//是否异步 _ xhr.send(null); if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) { alert(xhr.responseText); window.location.reload(); } else { alert(“Request was unsuccessful: “ + xhr.status); }
异步使用
var xhr = new XMLHttpRequest(); xhr.onreadystatechange=stateChange; xhr.open(“post”, “Url”, true); _//是否异步 _ xhr.send(null); function stateChange() { if (xhr.readyState==4) { _// 4 = “loaded” _ if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) { alert(xhr.responseText); window.location.reload(); } else { alert(“Request was unsuccessful: “ + xhr.status); } } }
发送数据
var xhr = new XMLHttpRequest(); xhr.open(“post”, “Url”, false); _//是否异步 _ var data = new FormData(); data.append(“bookId”, “1111”); data.append(“bookName”, “Web程序设计”); _//var aForm = document.getElementById(“form1”); _ _//var data = new FormData(aForm); _ xhr.send(data); if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) { alert(xhr.responseText); window.location.reload(); } else { alert(“Request was unsuccessful: “ + xhr.status); }
Ajax帮助器
- 安装。可以使用图形化介面安装
- Install-Package Microsoft.jQuery.Unobtrusive.Ajax –version 3.0.0
- 在页面上包含库
@Ajax.ActionLink()
@using(Ajax.BeginForm()) { }AjaxOptions类
包含:UpdateTargetID、Url、HttpMethod、……
使用Ajax回调(OnBegin、OnComplete、OnFailure、OnSuccess)
- 表格标签
-
列表项标签
- , 列表与列表之间有包含关系的,还可以嵌套使用,例如:
**