美文网首页我爱编程
AJAX 异步的 JavaScript 和 XML

AJAX 异步的 JavaScript 和 XML

作者: loyehu | 来源:发表于2017-10-20 17:52 被阅读0次

什么是 ajax

1.ajax(阿贾克斯 Asynchronous JavaScirpt And Xml)异步JavaScirpt 和 XML,是指一种创建交互式网页应用的网页开发技术,可以访问服务器数据的局部刷新的技术。

2.ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的web应用程序的技术。

ajax的作用是什么

允许客户端脚本发送HTTP请求,去请求服务器的数据来创建动态网页,可以在不重新加载整个网页(刷新网页)的情况下,对网页的某部分进行更新。也称为局部刷新。

常见例子: 分页、用户名即时验证(在输入的同时验证)、聊天室...

同步和异步

异步:完成一件事情的同时做别的事情,可以同时完成多件事情,互不影响;
同步:就是异步的反面,死等前面的执行结束,才执行下面的事情;

XML 传输数据的格式

例:
    <student>
        <name> loye </name>
        <age> 22 </age>
    </student>

【注】XML 和HTML很像,唯一不同的就是标签可以自定义,也是表达语义的,但是不用被浏览器呈递,就是负责交换信息的,现在已经被JSON替代,因为XML后台难以生成,前台难以解析。XML 没有数组,并且长,要有标签的封闭。

JSON 传输数据的格式

JSON(JavaScript Obiect Notation)是一种轻量级的数据交换格式。通过JavaScript 中的一些模式来表示结构化数据;
JSON 的语法可以表示三种类型的值:
    1. 对象表示法(JSON 中对象表示法必需要加上双引号,并且不存在赋值运算和分号):
        {
            "name": "loye",  // 必须加双引号,否则转换会出错(单引号也不行)
            "age": 22,   // 数字可以不加引号
        }
    2. 数组表示法(同样没有赋值和分号):
        ["loye","22","true"]
    3. 对象和数组结合的表示法(最常用的方法):
      ⑴.数组里面加对象:
        [
            {
                "name": "loye",
                "age": 22,
            },
            {
                "name": "落叶",
                "age": 22,
            }
        ]
      ⑵.对象里面加数组:
        {
            "age": 22,
            "name": ["loye","落叶"],
        }

JSON 解析

JSON解析 就是对JSON格式的字符串解析成原生的JavaScript值(数组或对象)。
  1. eval语句:能够识别字符串,并把字符串当做JS语句执行;
    var a = "alert(1+3+4)";
    eval(a);     // 弹出 结果为8的警告框
  1. 在ajax中,data 是一个 string,可以用eval转化为JSON,需要注意的是,JSON先通过圆括号的拼接,变为表达式;
  var json = eval( "(" + data + ")" );
  console.log(json);
  // data 可以为请求服务器获取的数据,但eval这个方法可能会造成安全问题;
JSON 对象提供了另外两个方法(常用):
  1. JSON.parse(): 
     JSON 解析,将JSON字符串转换为JavaScript原生值(对象或者数组);
  2. JSON.stringify():
    json 序列化,将原生JavaScript值(对象或者数组)转换为JSON 字符串的过程;

JSON 文本形式,并且赋值给变量box。box的值是标准的JSON格式写法(注意单双引号,将单引号写在外面,里面用双引号)

  var box = '[{"name": "loye","age":22},{"name": "落叶","age":22}]';

XMLHttpRequest

ajax 的核心是 JavaScript对象XMLHttpRequest。它是一种支持异步请求数据的技术(简称XHR)

XHR 的出现,提供了向服务器发送请求和解析服务器响应流畅的接口。能够以异步方式从服务器获取更多的信息,这就意味着,用户只要触发某一事件,在不刷新网页的情况下,更新服务器最新的数据。(XHR 支持IE7+、Firefox、Opera、Chrome和Safari等浏览器,但是不支持IE6)

IE7+、Firefox、OPera、Chrome和Safari等浏览器创建XHR:
 // 创建XHR 对象可以直接实例化 XMLHttpRequest 
var xhr = new XMLHttpRequest();
alert(xhr);      // XMLHttpRequest 
IE6 及以下,创建xhr
// 需要使用ActiveX 对象通过传入参数 Microsoft.XMLHTTP 来实现。
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
能力检测:
// 判断浏览器是否支持 XMLHttpRequest
if(window.XMLHttpRequest){
    // 支持创建xhr
    var xhr = new XMLHttpRequest;
}
else if(window.ActiveXObiect){
    var xhr = new ActiveXObiect("Microsoft.XMLHTTP");
}

open()方法:

他接受三个参数:
  1. 要发送的请求类型(get、post)
  2. 请求的URL
  3. 表示是否异步(true 表示异步、false 表示同步);
    xhr.open("GET/POST",url,true);   

send()方法:

向浏览器发送请求open() 方法并不会真正的发送请求,而是准备好需要发送给服务器的内容。我们需要通过send() 方法向服务器发送请求。
send() 方法接受一个参数,作为请求体发送的数据。

如果适合get方式请求则填null。
    xhr.send(null);

abort() 方法:

取消异步请求,如果需要取消异步请求,则在send()之后在调用,写在send()之前调用会报错。

xhr.abort();      // 取消异步请求

XHR 对象的属性:

当请求发送到服务器端,收到响应后,响应的数据会自动填充XHR 对象的属性,一共有四个属性
status:响应的 HTTP 状态;
    一般Http 状态码为 200 则表示请求服务器成功;
statusText:HTTP 状态的说明;
responseText:作为响应主体被返回的文本;
responseXML:如果响应主体内容类型是"text/xml"或"application/xml",
             则返回包含响应数据的XML文档,否则是null

readyState 属性:

0:  没有发送(open()还没有被调用);
1:  已经发送了,但服务器还没有接收到(调用send());
2:  服务器已经接收到了,但还没有处理完数据;
3:  服务器已经处理完数据,并且已经返回;
4:  客户端已经正常接收到服务器返回的数据;

特殊符号转码:

因为get方式是通过地址栏发送数据的,中文和特殊符号很容易出现乱码状况,先编码在转码之后不会出现乱码情况:

1. encodeURIComponent  编码
    var str = "你好";
    var r = encodeURIComponent(str);
    console.log(r);    // 编码结果: %E4%BD%A0%E5%A5%BD
2. decodeURIComponent  转码
    var str = "%E4%BD%A0%E5%A5%BD";
    var r = decodeURIComponent(str);
    console.log(r);    // 转码结果:你好

将自己的电脑变成服务器的方法:

apache、IIS、Nginx、Jboss、nodeJS . . .
nodejs 启动服务器的方法:
1. 进入服务器目录(例:server.js);
2. shift+ 鼠标右键,选择“在当前目录打开命令窗口”
3. 输入"node server.js" 回车启动;

同步请求数据:

// 浏览器向服务器请求数据(同步请求)

// 1. 创建对象
var xhr = new XMLHttpRequest();

// 2. 调用此对象中准备方法
open("GET","http://localhost:8080/ajax/ajaxtest",false);

// 3. 发送(同步请求,send执行完readyState 就已经 为 4了)
send();

// 4. 获取数据(服务器向浏览器返回一个数据(以字符串的形式传递回来))
var str = xhr.responseText;

console.log(str);    // 返回的数据

异步请求数据:

// 1. 创建对象
var xhr = new XMLHttpRequest();

// 2. 准备
open("GET","http://localhost:8080/ajax/ajaxtest",true);

// 3. 发送
send();

//4. 获取数据
xhr.onreadystatechange = function(){
    
    // 判断状态是否正确
    if(xhr.readyState == 4 && xhr.status == 200){
        var str = xhr.responseText;
        console.log(str);
    }
}

相关文章

网友评论

    本文标题:AJAX 异步的 JavaScript 和 XML

    本文链接:https://www.haomeiwen.com/subject/xhwvuxtx.html