JavaScript Ajax

JavaScript Ajax

Ajax简介:

  Ajax也被称为“远程脚本”技术,ajax使得javascript超越了客户端的界限,使其能够处理服务端的文件或程序

  Javascript的缺陷之一就是无非既时的与服务端通讯,需要重新加载页面才可以实现。Ajax已经解决了上述的问题。

  概念:Ajax是指javascript利用内置对象-XMLHttpRequest 在不重新加载页面的情况下与WEB服务端通讯的能力。

   Javascript客户端:

  传统的情况下javascript要想与服务端通讯必须要提交表单,远程脚本的诞生使得2这之间的通讯方法变的更加的丰富,ajax诞生于2005年。

Ajax(异步javascript和xml)及Ajax运行机制:

   异步的意思就是,浏览器不需要等待服务端的响应,就可以操作xml文件了。

  脚本首先创建xmlhttprequest对象,然后把请求发送给服务端。

  服务端发送文件或服务端程序的输出作为响应。

  Javascript接收来自于服务端的数据并开始处理接收到的数据。

  由于引入该技术(ajax)的目的就是提供更好的交互性,所以javascript会通过DOM来显示来自于服务端的数据,从而无需在次加载页面。

  由于请求是异步的,所以可以同时处理多个请求。

什么是后台程序:

  驻留在WEB服务器上的程序被称为‘后台’,最简单的后台就是WEB服务器上的文件。Javascript可以通过内置对象XMLHttpRequest来请求位于服务器上的文件,并处理该文件。通常的服务器端程序是用相关语言编写的,比如php ubyaspperl等。

  Javascript可以使用以下的2种方式向WEB服务端程序发送数据:

  get:数据被编码到URL中发送到服务端程序

  post:数据是被单独发送到服务端的。

什么是xml:

  XML(扩展标记语言),XML是服务端文件,服务端程序可以处理XML格式的数据。DOM中的方法也可以应用于XML文件。

  Ajax的出现使得WEB的既时性更加的明显了。

  Ajax的局限性:

  远程脚本是一种相对较新的技术,所以目前还不能应用于某些工作。Ajax的局限性与潜在问题包括:

  要求所请求的数据源必须在同一个域中。

  一些老版本浏览器与不常见的浏览器不支持XMLHttpRequest对象。

   XMLHttpRequest对象:

  下面将记载XMLHttpRequest对象与服务端通讯的方法。

  创建请求:

  首先需要声明XMLHttpRequest对象,可以通过new关键词来声明一个XMLHttpRequest对象:

   Ajaxreq=new XMLHttpRequest();

  以上代码不能运行在IE5与IE6上,需要这样写:

   Ajaxreq=new ActiveXObject(“Microsoft.XMLHTTP”);

  打开URL:

  XMLHttpRequest对象的open()方法需要2个参数:

  服务端文件名

  发送数据的方式。

  例如:

   Ajaxreq=open(“get”,”search.php?query=Liquidworm”);

  发送请求:

  通过XMLHttpRequest对象的send()方法可以把数据发送到服务端,如果发送数据的方式是post需要给定发送的数据为send()的参数,如果是以get方式发送的可以为null参数。

  Ajax.send(null);

  等待响应:

  请求被发送以后,javascript将会继续执行,由于结果可能会在任何时候返回。需要使用事件处理程序来监听,因此XMLHttpRequest提供了事件onreadystatechange :

   Ajaxreq.onreadystatechange=MyFunction;

已发送请求的对象带有一个属性 readystate 该属性发生变化时,onreadystatechange事件将被触发,所以需要检测该属性的当前状态,0 代表已请求,4代表请求已结束。

Ajax对象 XMLHttpRequest

  • Ajax 注意事项
  • IE 浏览器使用 ActiveXObject,而其他的浏览器使用名为 XMLHttpRequest 的 JavaScript 内建对象。
  • XMLHttpRequest 对象的三个重要的属性:
  •  
  • 方法:
    • 只能发送、IP、端口、HTTP协议相同的请求
    • xmlHttp=new ActiveXObject("Microsoft.XMLHTTP")
    • XMLHttp=new XMLHttpRequest() 
    • onreadystatechange  //应该注册这个事件
    • readyState  // 0 1 2 3 4  (4)是完成时
    • responseText  //服务器发回来的响应
    • responseXml
    • status   //获取响应码(200)
    • statusText
    • .open("GET","time.asp",true) ;    //1.方式   2.请求的页面   3.是否是异步
    • .send(null);
    • .setRequestHeader()  //在open()以后,send()之前设置
    • .getResponseHeader()
    • .getAllResponseHeaders()
    • .abort()

一段完整的代码

<script type="text/javascript">

    //异步请求Get

    var xhr = null;

    if (typeof (XMLHttpRequest) != 'undefined') {

        xhr = new XMLHttpRequest();

    } else {

        xhr = new ActiveXObject("Microsoft.XMLHttp");

    }

//打开连接

    xhr.open("get", "handler/GetList.ashx", true);

    //设置回调函数

    xhr.onreadystatechange = function () {

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

            //处理Json数据

            var arrJson = JSON.parse(xhr.responseText);

            //动态加载到表格

            var objTb = document.getElementById("tb_data");

            objTb.innerHTML = "";

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

                var tr = objTb.insertRow(-1);

                tr.insertCell(-1).innerHTML = arrJson[i]["AutoId"];

                tr.insertCell(-1).innerHTML = arrJson[i]["Title"];

                tr.insertCell(-1).innerHTML = arrJson[i]["Content"];

                tr.insertCell(-1).innerHTML = arrJson[i]["Email"];

            }

        }

    };

    xhr.send(null);

 

</script>

原文地址:https://www.cnblogs.com/reganLi/p/3407265.html