ajax原理 XmlHttpRequest对象 【AJAX 实例】

前端之家收集整理的这篇文章主要介绍了ajax原理 XmlHttpRequest对象 【AJAX 实例】前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式。

异步传输是面向字符的传输,它的单位是字符;而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的。

同步传输的比特分组要大得多。它不是独立地发送每个字符,每个字符都有自己的开始位和停止位,而是把它们组合起来一起发送。我们将这些组合称为数据帧,或简称为帧。

同步传输通常要比异步传输快速得多。

打个比方,如果现在你家里所在的小区因某种情况而面临停水,现在有关部门公布了两种方案,一是完全停水8个小时,在这8个小时内完全停水,8个小时后恢复正常。二是不完全停水10个小时,在这10个小时内水没有完全断,只是流量比原来小了很多,在10个小时后恢复正常流量,那么,如果是你你会选择哪种方式呢?显然是后者。

ajax并非一种新的技术,而是几种原有技术的结合体。它由下列技术组合而成。

1.使用CSS和XHTML来表示。

2. 使用DOM模型来交互和动态显示。{var data = document.getElementById("username").value;}

3.使用XMLHttpRequest来和服务器进行异步通信。

4.使用javascript来绑定和调用

在上面几中技术中,除了XmlHttpRequest对象以外,其它所有的技术都是基于web标准并且已经得到了广泛使用的,XMLHttpRequest虽然目前还没有被W3C所采纳,但是它已经是一个事实的标准,因为目前几乎所有的主流浏览器都支持它。

Ajax的全称是Asynchronous Javascript And XML.AJax由HTML,Javascript,DHTML和DOM组成.

HTML用于建立Web表单

Javascript代码用于运行Ajax应用程序的核心代码,用于和服务器引用程序进行通信

DHTML用于动态更新表单

DOM用于处理HTML结构和服务器返回的XML

时至今日,Js中可以处理的数据包括了字符串,JSON,XML数据.

XMLHttpRequestajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果

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获取完整的回应数据

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();
}

open方法指定了:

a、向服务器提交数据的类型,即post还是get。

b、请求的URL地址和传递的参数。

c、传输方式,false为同步,true为异步。默认为true。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。我们需要根据实际需要来指定同步方式,在某些页面中,可能会发出多个请求,甚至是有组织有计划有队形大规模的高强度的request,而后一个是会覆盖前一个的,这个时候当然要指定同步方式。

XMLHttpRequest是完全用来向服务器发出一个请求的,它的作用也局限于此,但它的作用是整个ajax实现的关键,因为ajax无非是两个过程,发出请求和响应请求。

ajax的优点


Ajax的给我们带来的好处大家基本上都深有体会,在这里我只简单的讲几点:

1、最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。

  2、使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。

  3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。

4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序

ajax的缺点

1ajax干掉了back按钮,即对浏览器后退机制的破坏。

2、安全问题:技术同时也对IT企业带来了新的安全威胁,ajax技术就如同对企业数据建立了一个直接通道。

3、对搜索引擎的支持比较弱。

4、破坏了程序的异常机制。分别采用ajax和传统的form提交的模式来删除一条数据……给我们的调试带来了很大的困难。

5、另外,像其他方面的一些问题,比如说违背了url和资源定位的初衷。

6、一些手持设备(如手机、PDA等)现在还不能很好的支持ajax,比如说我们在手机的浏览器上打开采用ajax技术的网站时,它目前是不支持

http://www.cnblogs.com/ustbwuyi/archive/2007/02/08/645061.html#2215165

实例

get.htm页面HTML代码如下:

<body>
    <label for="txt_username">
        姓名:</label>
    <input type="text" id="txt_username" />
    <br />
    <label for="txt_age">
        年龄:</label>
    <input type="text" id="txt_age" />
    <br />
    <input type="button" value="GET" id="btn" onclick="btn_click();" />
    <div id="result">
    </div>
</body>

js代码如下:

<script type="text/javascript">
    function btn_click() {
        //创建XMLHttpRequest对象
        var xmlHttp = new XMLHttpRequest();

        //获取var username = document.getElementById("txt_username").value;
        var age = document.getElementById("txt_age").value;

        //配置XMLHttpRequest对象
        xmlHttp.open("get","Get.aspx?username=" + username
            + "&age=" + age);

        //设置回调函数
        xmlHttp.onreadystatechange = function () {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                document.getElementById("result").innerHTML = xmlHttp.responseText;
            }
        }

        //发送请求
        xmlHttp.send(null);
    }
</script>

新建Get.aspx页,Get.aspx.cs代码如下:

protected void Page_Load(object sender,EventArgs e)
{
    Response.Clear();

    string username = Request.QueryString["username"];

    string age = Request.QueryString["age"];

    Response.Write("姓名:'" + username + "'<br/>年龄:" + age + "<br/>时间:'" + DateTime.Now.ToString() + "'");

    Response.End();
}

结果:

输入姓名和年龄,点击Get按钮,就会从服务器获取到数据.

小结:

今天暂时写一个完整的例子来显示Ajax的调用过程,此例中存在许多问题:

  1. 如何创建在大部分浏览器中都能运行的XMLHttpRequest对象.
  2. 使用get请求时存在缓存问题
  3. 中文乱码问题

针对这些已经出现的问题,我们在随后的例子中会一一解决.

对于其他的疑问,比方说:

  1. 如何使用post传递数据
  2. post和get有什么区别
  3. 1.使用Get请求时,参数在URL中显示,而使用Post方式,则不会显示出来
  4. 2.使用Get请求发送数据量小,Post请求发送数据量大
    1.get请求需注意缓存问题,post请求不需担心这个问题
    2.post请求必须设置Content-Type值为application/x-form-www-urlencoded

    3.发送请求时,因为get请求的参数都在url里,所以send函数发送的参数为null,而post请求在使用send方法时,却需赋予其参数

    5.在客户端使用get请求时,服务器端使用Request.QueryString来获取参数,而客户端使用post请求时,服务器端使用Request.Form来获取参数.
    服务器在接受参数时,可以采用一个通用的方法,即:Request["username"]来接受参数

    Get请求的目的是给予服务器一些参数,以便从服务器获取列表.例如:list.aspx?page=1,表示获取第一页的数据

    Post请求的目的是向服务器发送一些参数,例如form中的内容.




  5. 如何使用传输和使用json数据
  6. 如何传输和使用xml数据(毕竟,Ajax最后的一个字母x指的是XML)

http://www.cnblogs.com/oneword/archive/2011/06/04/2072558.html

原文链接:https://www.f2er.com/ajax/166142.html

猜你在找的Ajax相关文章