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>可对部分文本设置样式属性