关于javascript:秃头油腻胖子的进阶之路Ajax篇上

W3C学习笔记(谁说抄不是笔记?)

Ajax根底

Ajax教程

Ajax=Asynchronous JavaScript and XML(异步的JavaScript和XML)。
Ajax不是新的编程语言,而是一种应用现有规范的新办法
Ajax是与服务器替换数据并更新局部网页的艺术(???),在不从新加载整个页面的状况下。

Ajax简介

Ajax是一种在无需从新加载整个网页的状况下,可能更新局部网页的技术。


学习之前,应该要对上面的常识有根本的理解

  • HTML/XHTML
  • CSS
  • JavaScript/DOM
    • *

什么事Ajax?
Ajax=异步javascript和xml。
Ajax事一种用于创立疾速动静网页的技术。

通过在后盾与服务器进行大量数据交换,Ajax能够应用网页实现异步更新。这意外这能够在不从新加载整个网页的状况下,对网页的某局部进行更新。
传统的网页(不实用Ajax)如果须要更新内容,必须更新整个网页面。
有很多应用Ajax的应用程序案例:Google地图,弹幕等。


Ajax实例

案例参见:https://www.w3school.com.cn/a…


Ajax实例解释:
下面的Ajax应用程序蕴含一个div和一个按钮。
div局部用于显示来自服务器的信息,当按钮被点击时,它负责调用名为loadXMLDoc()的函数,留神这是须要写在<body>中的页面显示局部:

<body>
    <div id="myDiv"><h3>Let Ajax change this text</h3></div>
    <button type="button" onclick="loadXMLDoc()">Change Content</button>
</body>

接下来就是须要在head局部增加一个script标签:

<head>
<script type="text/javascript">
function loadXMLDoc(){
}
</script>
</head>

Ajax XHR

XHR创建对象

XMLHttpRequest是Ajax的根底


XMLHttpRequest对象

所有古代浏览器均反对XMLHttpRequest对象(IE5和IE6是用ActiveXObject)。
XMLHttpRequest用于在后盾与服务器替换数据,这意味着能够在不从新加载整个页面的状况下,对网页的某局部进行更新。


创立XMLHttpRequest对象

所有浏览器(IE7+,FireFox,Chrome,Safari以及Opera)均外敌XMLHttpRequest对象

创立XMLHttpRequest对象的语法:

variable=new XMLHttpRequest();

Ajax申请

XMLHttpRequest对象用于和服务器替换数据

向服务器发送申请

如需讲申请发送带服务器,咱们应用XMLHttpRequest对象的open()和send()办法:

xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();
办法 形容
open(method,url,async) 规定申请的类型、URL以及是否异步解决申请。 1.method:申请的类型;GET和POST。 2.URL:文件在服务器上的地位 3.async:true(异步)或false(同步)
send(String) 将申请发送到服务器。 string:仅用于POST申请

GET还是POST?
与POST相比,GET绝对更简略,也更快,并且在大部分状况下都能用,而后在一下状况中,请应用POST申请:

  • 无奈应用缓存文件(更新服务器上的文件或数据库)
  • 像服务器发送大量数据(POST没有数据量限度)
  • 发送蕴含未知字符的用户输出时,POST比GET更文件也更牢靠
    • *

GET申请
一个简略的GET申请:

xhr.open("GET","demo_get.asp",true);
xhr.send();

如果心愿通过GET办法发送信息,能够再增加:

xhr.open("GET","demo_get2.asp?fname=Bill&lname=Gates",true);
xhr.send();

POST申请
一个简略的POST申请:

xhr.open("POST","demo_post.asp",true);
xhr.send();

如果须要像HTML表单那样POST数据,能够应用setRequestHeader()来增加HTTP头。而后在send办法中规定你心愿发送的数据:

xhr.open("POST","demo_post.asp",true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("fname=Bill&lname=Gates");
办法 形容
setRequestHeader(_header_,_value_) 向申请增加HTTP头。 hearder:规定头的名称 value:规定头的值~~~~

url-服务器上的文件
open()办法的url参数是服务器上文件的地址:

xmlhttp.open("GET","ajax_test.asp",true);

该文件能够是任何类型的文件,比方:.txt和.xml,或者服务器脚本文件,比方:.asp和.php(在传回相应之前,可能在服务器上执行工作)。


异步:Async=true
当应用async=true时,就须要规定相应处于onreadystatechange工夫中的就绪状态时执行的函数:

xhr.onreadystatechange=function(){
    if(xhr.readyState==4&&xhr.status==200){ document.getElementById("myDiv").innerHTML=xhr.responseText;
        }
 }
 xhr.open("GET","test1.txt",true);

同步:Async=false
如果应用async=false,须要在open()办法中的第三个参数批改为false,W3C不举荐应用这个,然而对于小申请,也是能够的。请记住,javascript会等到服务器相应就绪才继续执行,如果服务器忙碌或迟缓,应用程序会被挂起或进行

XHR响应

服务器相应
如需取得来自服务器的相应,就须要XMLHttpRequest对象的responseText或responseXML属性。

属性 形容
responseText 取得字符串模式的响应数据。
responseXML 取得 XML 模式的响应数据。

responseText属性
responseText属性返回字符串模式的响应,写法为:

document.getElementById("myDiv").innerHTML=xhr.responseText;

responseXML属性
如果来自服务器的响应是XML,并且须要作为XML对象进行解析,就须要应用 responseXML,例如:

xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementByTagName("SHIT");
for(i=0;i<x.length;i++){
    txt=txt+x[i].childNodes[0].nodeValue+"<br/>";
    }
document.getElementById("myDiv").innerHTML=txt;    

XHR readyState

onreadystatechange事件
当申请被发送到服务器时,咱们须要执行一些急于响应的工作。每当readState扭转时,就会触发onreadystatechange事件。readyState属性存有XMLHttpRequest的状态信息。上面是XMLHttpRequest对象的三个重要的属性:

属性 形容
onreadystatechange 存储函数(或函数名),每当 readyState 属性扭转时,就会调用该函数。
readyState 存有XMLHttpRequest 的状态。从 0 到 4 发生变化。 0:申请未初始化。1:服务器连贯已建设。2:申请已接管。3:申请解决中。4:申请已实现,切响应已就绪
status 200:”OK” 400:未找到页面

在onreadystatechange事件中,咱们规定当服务器响应已做好被解决的筹备时执行的工作。当readyState等于4时切状态为200时,示意响应已就绪:

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理