• Ajax原理


    Ajax的原理

    简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。

    什么是Ajax

    Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

    Ajax的全称是Asynchronous JavaScript and XML,即异步JavaScript+XML。它并不是新的编程语言,而是几种原有技术的结合体。它由以下几种技术组合而成,包括:

    • HTML/XHTML——主要的内容表示语言。
    • CSS——为XHTML提供文本格式定义。
    • DOM——对已载入的页面进行动态更新。
    • XML——数据交换格式。
    • XSLT——将XML转换为XHTML(用CSS修饰样式)。
    • XMLHttp——用XMLHttpRequest来和服务器进行异步通信,是主要的通信代理。
    • JavaScript——用来编写Ajax引擎的脚本语言。

    实际上,在Ajax解决方案中这些技术都是可用的,不过只有三种是必须的:HTML/XHTML、DOM以及JavaScript。

    XMLHttpRequest对象

    当需要异步与服务器交换数据时,需要XMLHttpRequest对象来异步交换。XMLHttpRequest对象的主要属性有:

    • onreadystatechange——每次状态改变所触发事件的事件处理程序。
    • responseText——从服务器进程返回数据的字符串形式。
    • responseXML——从服务器进程返回的DOM兼容的文档数据对象。
    • status——从服务器返回的数字代码,如404(未找到)和200(已就绪)。
    • status Text——伴随状态码的字符串信息。
    • readyState——对象状态值。对象状态值有以下几个:
      • 0 - (未初始化)还没有调用open()方法
      • 1 - (启动)已调用open()方法,但尚未调用send()方法
      • 2 - (发送)调用send()方法,但尚未接收到相应。
      • 3 - (接收)已经接收到响应数据
      • 4 - (完成)已经接收到全部响应数据,而且已经可以在客户端使用了

    Ajax的核心就是JavaScript对象XmlHttpRequest,这个对象为向服务器发送请求和解析服务器响应提供了流畅的接口。

    XMLHttpRequest对象有两个重要方法 open与send。

    open方法不会向服务器发送真正请求,它相当于初始化请求并准备发送。

    • open() 方法的 url 参数是服务器上文件的地址:可以是任何类型的文件,比如 .txt 和 .xml,或者服务器脚本文件,比如 .asp 和 .php (在传回响应之前,能够在服务器上执行任务)。

    真正能够向服务器发送请求需要调用send方法,并仅在POST请求可以传入参数,不需要则发送null,在调用send方法之后请求被发往服务器。  

    请求发往服务器,服务器根据请求生成响应(Response),传回给XHR对象,在收到响应后相应数据会填充到XHR对象的属性,有四个相关属性会被填充:

    • responseText——从服务器进程返回数据的字符串形式。
    • responseXML——从服务器进程返回的DOM兼容的文档数据对象。
    • status——从服务器返回的数字代码,如404(未找到)和200(已就绪)。
    • status Text——伴随状态码的字符串信息。

     必须在open方法之前指定onreadtstatechange事件处理程序.

    xhr.open('get','default.aspx,false'); //准备同步请求
    xhr.send();
    if(xhr.status>=200 && xhr.status<300 || xhr.status==304){
         //do something
    }else{
          //error handler
    }

    在以下情况中,请使用 POST 请求:

    • 无法使用缓存文件(更新服务器上的文件或数据库)
    • 向服务器发送大量数据(POST 没有数据量限制)
    • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

    如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:

    xmlhttp.open("POST","ajax_test.html",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("fname=Henry&lname=Ford");
  • 相关阅读:
    函数指针_typedef
    网络学习_2
    网络学习_1
    字节序
    string相关总结
    C++ const用法总结
    U盘安装CentOS 7.0
    windows平台CodeBlocks MinGW C++11开发环境搭建
    关于32位windows与4GB内存的那些事儿
    开启win7系统关闭日志分析
  • 原文地址:https://www.cnblogs.com/ceceliahappycoding/p/10566578.html
Copyright © 2020-2023  润新知