AJAX学习

AJAX无需在加载真个页面的情况下,更新部分网页的内容,基于Internet标准的,不是一项新技术,快速创建动态网页的技术。
AJAX=异步JavaScripts + XML
AJAX工作原理
浏览器:创建XMLHttpRequest对象;发送HttpRequest请求-----》服务器:处理HttpRequest请求;创建一个response并发送数据给浏览器-----》
浏览器:使用JavaScripts处理发送的数据;更新网页内容

相关的技术:
XMLHttpRequest对象(异步与服务器交换数据)
JavaScripts/DOM(信息显示/交互)
CSS(给数据定义样式)
XML(作为转换数据的格式)

AJAX应用程序与浏览器和平台无关

xmlhttp.readyState的值及解释:
0:请求未初始化(还没有调用 open())。
1:请求已经建立,但是还没有发送(还没有调用 send())。
2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
4:响应已完成;您可以获取并使用服务器的响应了。
xmlhttp.status的值及解释:
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本
200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求
300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除
400——错误请求,如语法错误
401——请求授权失败
402——保留有效ChargeTo头响应
403——请求不允许
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求

合起来
500——服务器产生内部错误
501——服务器不支持请求的函数
502——服务器暂时不可用,有时是为了防止发生系统过载
503——服务器过载或暂停维修
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的HTTP版本
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
xmlhttp.readyState==4 && xmlhttp.status==200

XMLHttpRequest.open()
初始化 HTTP 请求参数

语法
open(method, url, async, username, password)

method 参数是用于请求的 HTTP 方法。值包括 GET、POST 和 HEAD。
( 大小写不敏感。
POST:用"POST"方式发送数据,可以大到4MB
GET:用"GET"方式发送数据,只能256KB
如果请求带有参数的化实用POST方式,POST方式将参数放置在页面的隐藏控件内
没有参数使用GET方式
对于请求的页面在中途可能发生更改的,也最好用POST方式
)

url 参数是请求的主体。大多数浏览器实施了一个同源安全策略,并且要求这个 URL 与包含脚本的文本具有相同的主机名和端口。

async 参数指示请求使用应该异步地执行。如果这个参数是 false,请求是同步的,后续对 send() 的调用将阻塞,直到响应完全接收。
如果这个参数是 true 或省略,请求是异步的,且通常需要一个 onreadystatechange 事件句柄。

username 和 password 参数是可选的,为 url 所需的授权提供认证资格。如果指定了,它们会覆盖 url 自己指定的任何资格。

网页代码

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8     <form action="/add/" method="get">
 9         a:<input type="text" name="a" id="a" placeholder="请输入数字"><br>
10         b:<input type="text" name="b" id="b" placeholder="请输入数字"><br>
11         <p>result:<span id="result"></span></p>
12         <button type="button" id="sum">Calc</button>
13     </form>
14     <br/>
15     <div id="list">ajax加载列表</div>
16     <p id="list_result"></p>
17 
18     <div id="dict">ajax加载字典</div>
19     <p id="dict_result"></p>
20 
21     <div id="modify"><h2>AJAX点击按钮修改文本内容</h2></div>
22     <button type="button" onclick="loadXMLDoc()">点击</button>
23 
24 
25     <script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.min.js"></script>
26     <script>
27         $(document).ready(function () {
28             // a+b
29            $("#sum").click(function () {
30                var a = $('#a').val();
31                var b = $('#b').val();
32 
33                $.get({% url 'calc_add' %}, {'a':a, 'b':b}, function (ret) {
34                    $("#result").html(ret)
35                })
36            });
37 
38            // list
39             $("#list").click(function () {
40                 $.getJSON({% url 'name_list' %}, function (ret) {
41                     // ret返回值是一个列表
42                     for (var i=0; i<ret.length; i++){
43                         // 存储到list_result中
44                         $("#list_result").append(' '+ ret[i])
45                     }
46                 })
47             });
48             
49             //dict
50             $("#dict").click(function () {
51                 $.getJSON({% url 'name_dict' %}, function (ret) {
52                     // ret是一个字典
53 {#                    $("#dict_result").append(ret['b']+ '<br>')#}
54                     $.each(ret, function (key, value) {
55                         //key为字典的,value为字典的值
56                         $("#dict_result").append(value)
57                     })
58                 })
59             })
60         });
61 
62         function loadXMLDoc() {
63             var xmlhttp
64             if(window.XMLHttpRequest){
65                 //建立xmlhttp对象,用于火狐、谷歌、
66                 xmlhttp = new XMLHttpRequest()
67             }
68             else {
69                 // for IE5, IE6
70                 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
71             }
72             xmlhttp.open('GET', '/static/file/test.txt', true);
73             xmlhttp.send();
74             // 准备状态改变
75             xmlhttp.onreadystatechange = function () {
76                 // 乡音成功
77                 if(xmlhttp.readyState==4 && xmlhttp.status==200){
78                     // 返回后台处理的数据
79                     document.getElementById("modify").innerHTML = xmlhttp.responseText
80                 }
81             }
82 
83         }
84 
85     </script>
86 
87 
88 
89 
90 </body>
91 </html>

向URL中添加信息
xmlhttp.open('GET', '/add?a=23&b=12', true);
xmlhttp.send();

向服务器发送请求
如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

AJAX XMLHttpRequest 服务器响应
如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性
responseText 获得字符串形式的响应数据。
responseXML 获得 XML 形式的响应数据。

onreadystatechange事件
当请求发送到服务器时,我们需要执行一些基于响应的任务。当readyState发生改变时,就会触发onreadystatechange事件。
readyState属性存有XMLHttpRequest的状态信息,在onreadystatechange事件中,当服务器响应已经做好被处理准备时所执行的任务

callback函数,是一种以参数形式传递给另一个函数的函数。
如果网站上有多个AJAX任务,应该为创建XMLHttpRequest对象编写一个标准的函数,并为每一个AJAX任务调用该函数。
该函数应该包含URL以及发生onreadystatechange事件执行的任务。

HTML5声明:<!DOCTYPE html>
忘记使用结束标签会产生不可预料的结果或错误。
没有内容的 HTML 元素被称为空元素,使 <br> 在所有浏览器中都是有效的,但使用 <br /> 其实是更长远的保障.
HTML属性,元素可以设置属性,一般描述于开始标签,总是以名称/值的形式出现,如:name="deng".
适用于大多数HTML的属性:
1)class:为html定义一个或多个类名(classname),类名从样式文件引入
2)id:定义元素的唯一ID
3)style:规定元素的行内样式,<style> 元素中你需要指定样式文件来渲染HTML文档
4)title:描述元素的额外信息,展示要表达的完整版本

<!-- -->注释

格式化标签
<strong>,<b>加粗
<em>,<i>斜体
<q>块引用
HTML使用标签 <a>来设置超文本链接。
超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。
当您把鼠标指针移动到网页中的某个链接上时,箭头会变为一只小手。
在标签<a> 中使用了href属性来描述链接的地址。
默认情况下,链接将以以下形式出现在浏览器中:
一个未访问过的链接显示为蓝色字体并带有下划线
访问过的链接显示为紫色并带上下划线
点击链接时,链接显示为红色并带上下划线

<meta>标签描述了一些基本元数据,元数据不显示在页面上,但是会被浏览器解析
METE标签通常用于指定网页的描述,关键词,文件的最后修改时间,作者和其他元数据
<meta>通常放在<head>区域
<script>用于加载脚本文件
CSS用于渲染HTML标签的样式,使用内联样式添加到HTML中,在相关的标签中使用样式属性,样式属性可以包含任何CSS属性
<p style="color: aquamarine; margin-left: 20px">This is style para</p>
在style中:现在通常使用font-family(字体),color(颜色),和font-size(字体大小)属性来定义文本样式,而不是使用<font>标签

一、当单个文件需要特别样式时,就可以使用内部样式表。你可以在<head> 部分通过 <style>标签定义内部样式表:
<head>
<style type="text/css">
body {background-color:yellow;}
p {color:blue;}
</style>
</head>

<link> 标签定义文档与外部资源的关系。
<link> 标签最常见的用途是链接样式表。
注意: link 元素是空元素,它仅包含属性。
注意: 此元素只能存在于 head 部分,不过它可出现任何次数。

二、当样式需要被应用到很多页面的时候,外部样式表将是理想的选择。使用外部样式表,你就可以通过更改一个文件来改变整个站点的外观。
<head>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>

<td>表示table data,数据单元格的内容
<li>定义无序列表
<table cellpadding='2'></table>单元格边距,创建单元格内容与其边框之间的空白。
<table cellspacing='3'></table>单元格间距,改变单元格之间的距离。

列表:
1)有序列表:1.a;2.b;3.c。有序列表始于<ul>标签 ,每个列表项始于<li>

2)无序列表:无序列表始于<ol>标签,每个列表项始于<li>

HTML可以通过<div>、<span>将元素组合起来
大多数HTML元素为块级元素或内联元素
块级元素(block-level):实例:<h>,<ul>,<p>,<table>,大多数块级元素通常以新行开始或结束
内联元素(inline):在显示时通常不会以新行开始,实例:<a>,<img>,<td>,<b>

<div>是块级元素,可以用于组合其他HTML的容器,没有特定的含义,浏览器会在其前后显示折行
如果与CSS一同使用,<div>可对大的内容块设置样式属性

<span>是内联元素,可用作文本的容器,也没有特定的含义。如果与CSS一同使用,<span>可对部分文本设置样式属性

原文地址:https://www.cnblogs.com/demo-deng/p/7850242.html