初步了解Ajax

    xiaoxiao2021-03-25  96

    以下参考部分菜鸟驿站以及W3school

    Ajax是一种让网页的响应更快的技术,因为它允许异步地向服务器发送请求,而不需要重新载入页面,使用Ajax来提升用户体验。

    Ajax=Asynchronous JavaScript and XML (异步JavaScript和XML)

    Ajax不是新的编程语言,而是一种使用了现有标准的新方法。它最大的优点在于不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。Ajax是不需要任何浏览器插件,但是需要用户允许JavaScript在浏览器上执行。

    1.Ajax工作原理

    在浏览器中,有一个事件发生了,然后会产生一个XMLHttpRequest 对象,然后发送HttpRequest到服务器,处理HTTPRequest请求,创建一个响应然后把数据传送到浏览器中,浏览器中用JavaScript处理从服务器中返回来的数据,之后就更新部分数据。

    XMLHttpRequest对象(异步的与服务器交换数据),JavaScript/DOM(信息显示/交互),CSS(给数据定义样式),XML(作为转换数据的格式),Ajax应用程序与浏览器和平台无关的。

    所有的现代浏览器都是支持XMLHttpRequest对象的(IE5 IE6)使用的是ActiveXObject.

    XMLHttpRequest是用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

    2.创建XMLHttpRequest对象,所有的现代浏览器(IE7+,Firefox,Chrome,Safari以及Opera)内均建XMLRequest对象。

    那创建的语法是var=new XMLHttpRequest();

    而IE 5 IE6就要这样子创建: var=new ActiveXObject("Microsoft.XMLHTTP");

    为了保证可以在所有的浏览器中运行,我们一般都要对他们进行创建,如果不支持的话,那么我们就创建ActiveXObject;

    有关的代码是:

    var xmlhttp; if(window.XMLHttpRequest){ xmlhttp=new XMLHttpRequest(); } else{ xmlhttp=new ActiveXObject('Microsoft.XMLHTTP'); }

    3.向服务器中发送请求

    之前提过,XMLHttpRequest对象是用于和服务器交换数据的,如果我们想要将请求发送到服务器,那么我们就可以使用XMLHttpRequest对象的open()和send()方法:

    xmlhttp.open("GET","ajax_info.txt",true);

    xmlhttp.send();

    首先我们来介绍一下open()这个方法,从上面可以看到open()中有三个参数的,分别是method,url,asyc,他们分别规定了请求的类型,URL以及是否异步处理请求。一般来说,请求的类型分为GET或者是POST.URL是指文件中服务器上的位置,async是表示是异步还是同步,如果是异步我们就设置为true,如果是同步的话,就设置为false。这里设置为true就是代表我们通过Ajax就可以在等待服务器响应的时候执行其他的脚本,当响应就绪后对响应进行处理,大大利用了资源,提高了网站的性能。

    send(string)的方法,send()中其实有一个参数的,但是只用于post请求,但是这里是GET请求,所以没有使用这个参数.

    **那我们什么时候用GET,什么时候使用POST呢?

    GET其实会更加地简单,并且在大部分情况下我们都可以使用。然而在以下的情况下,我们使用的是POST请求。

    1)无法使用缓存文件(更新服务器上的文件或者数据库)

    2)向服务器发送大量的数据(POST没有数量上的限制)

    3)发送包含未知的字符的用户输入时,POST更加可靠而且也稳定。而get可以直接在url后面添加要传输的数据。而post是则怎样传送数据的呢?

    就要使用setRequestHeader()来添加HTTP头,然后在刚刚说过的send()方法中添加string.例如:

    xmlhttp.open("POST",url,true);

    xmlhttp.setRequestHeader("Content-type"."application/x-www-form-urlencoded");

    xmlhttp.send("frame=Henry&lname=Ford");

    关于这个url,是指服务器上文件的地址。该文件可以是任何类型的文件,比如是.txt,和.xml,或者服务器脚本文件,比如.asp和.php。

    4.服务器响应

    如果我们需要获得来自服务器的响应的话,就使用XMLHttpRequest对象的responseText(这个是获得字符串形式的响应数据,如果我们服务器的响应不是来自于XML的话,我们就应该使用这个属性)或者是responseXML(这个是获得XML形式的响应数据)属性。

    document.getElememtById("myDiv").innerHTML=xmlhttp.responseText;

    如果我们使用的是responseXML是需要作为XML对象进行解析的。

    xmlDoc=xmlhttp.responseXML

    txt="";x=xmlDoc.getElementsByTagName("ARTIST");

    for(i=0;i<x.length;i++){  

    txt=txt + x[i].childNodes[0].nodeValue + "<br>";

    }document.getElementById("myDiv").innerHTML=txt;

    5.onreadystatechange事件

    当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当readyState改变时,就会触发onreadystatechange事件。readyState属性存有XMLHttpRequest的状态信息。

    下面是XMLHttpRequest对象的三个重要的属性:

    属性                                        描述

    onreadystatechange               存储函数(或函数名)。每当readyState属性改变的时候,就会调用该函数。

    readtState                                存有XMLHttpRequest的状态。从0到4发生变化。

                                                      0:请求未初始化。

                                                      1:服务器连接已经建立

                                                      2:请求已经接收

                                                      3:请求处理中

                                                      4:请求已经完成,且响应已就绪。

    status                                        200:"OK"

                                                      404:未找到该页面

    在onreadystatechange事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

    当readyState等于4且状态为200时,表示响应已经就绪:

    xmlhttp.onreadystatechange=function(){

    if(xmlhttp.readyState==4&&xmlhttp.status==200){

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

    }

    }

    ##onreadystatechange事件被触发5次(0-4),对应着readyState的变化。

    使用回调函数

    回调函数是一种以参数形式传递给另一个函数的函数。如果你的网站中存在多个AJAX任务的话,你应该为创建XMLHttpRequest对象编写一个标准的函数,并为每个AJAX任务调用该函数。该函数调用应该包含URL以及发生onreadystatechange事件执行时的任务(每次调用可能不尽相同)

    function myFunction(){

    loadXMLDoc(URL,function(){      //加载XML文档中的代码可以存储在一个函数中

    if(xmlhttp.readyState==4&&xmlhttp.status==200){

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

    }

    });

    }

    转载请注明原文地址: https://ju.6miu.com/read-24118.html

    最新回复(0)