AJAX

什么是ajax

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

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

作用:

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

JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 通过JavaScript中的一些模式来表示结构化数据, JSON 并不是 JavaScript 独有的数据格式,其他很多语言都可以对 JSON 进行解析和序列化,
除了JSON外, 还有XML也是一种数据表示方式;

JSON 的语法可以表示三种类型的值:

1.对象表示法
2.数组表示法
3.对象和数组的结合的表示法

对象表示法:
JavaScript 对象字面量表示法:

var box = {
      name : 'Zhang', 
      age : 100
};

JSON 中的对象表示法需要加上双引号,并且不存在赋值运算和分号:

{ "name" : "Zhang", //需要使用双引号,否则转换会出错
  "age" : 100
}

数组表示法:
JavaScript 数组字面量表示法:

 var box = [100, 'Zhang', true];

JSON 中的数组表示法同样没有变量赋值和分号:

 [“100”, “Zhang”, “true”]

对象和数组结合的复杂形式:

[ { "name" : "a", 
    "age" : 1
  },
  { "name" : "b",
    "age" : 2 
  },
]

JSON 的解析:

JSON解析就是对JSON格式的字符串解析成原生的JavaScript值(数组或对象)

1.eval()函数. 但这个方法可能会造成安全问题
2.JSON 对象提供了另外两个方法(常用): JSON.parse(): 将JSON字符串转换为JavaScript原生值(对象或数组);
JSON.stringify() : json序列化,将原生JavaScript值(对象或数组)转换为JSON字符串的过程;

XMLHttpRequest

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

XHR 的出现,提供了向服务器发送请求和解析服务器响应流畅的接口。能够以异步方式从服务器获取更多的信息,这就意味着,用户只要触发某一事件,在不刷新网页的情况下,更新服务器最新的数据。

XHR对象支持IE7+、Firefox、Opera、Chrome 和 Safari 等浏览器, 但是不支持IE6。

创建 XHR 对象可以直接实例化 XMLHttpRequest 。
var xhr = new XMLHttpRequest();
alert(xhr); //XMLHttpRequest

如果是 IE6 及以下,那么我们必须还需要使用 ActiveX 对象通过 传入参数Microsoft.XMLHTTP来实现。
xhr = new ActiveXObject("Microsoft.XMLHTTP");

如何写

open()方法:
它接受三个参数:要发送的请求类型(get、post)、请求的 URL 和表示是否异步 xhr.open('get', 'demo.json', false); //对于demo.json 的 get 请求,false表示同步

send()方法:
向服务器发送请求 open()方法并不会真正发送请求,而是准备好需要发送给服务器的内容。我们需要通过send()方法向服务器发送请求
send()方法接受一个参数,作为请求体发送的数据。如果是get方式请求则填 null。 xhr.send(null);

abort()方法:
取消异步请求, 如果需要取消某异步请求, 则在send()之后再调用, 写在send()之前调用会报错
//取消异步请求 xhr.abort();

XHR 对象的属性:

当请求发送到服务器端,收到响应后,响应的数据会自动填充 XHR 对象的属性。一共有四个属性:

status: 响应的 HTTP 状态 (重要)
statusText: HTTP 状态的说明 (重要)
responseText:  作为响应主体被返回的文本 (重要)
responseXML: 如果响应主体内容类型是"text/xml"或"application/xml",则返回包含响应数据的 XML文档,否则是null

status 属性:

  HTTP请求状态码, 一般 HTTP 状态代码为 200 则表示请求服务器成功
HTTP 协议中, 状态码
   404:  找不到服务器中的资源
   403:  服务器缓存
   500:  服务器故障
   200:  【正常】返回
   400:  语法错误导致服务器不识别
   503:  由于服务器过载或维护导致无法完成请求

readyState 属性

0:       没有发送
1:       已经发送了,但服务器还没有接收到
2:       服务器已经接收到了,但还没有处理完数据
3:       服务器已经处理完数据,并已经返回
4:       客户端已经正常接收到服务器返回的数据
// 1. 创建对象
var xhr = new XMLHttpRequest();

// 2. 准备
        //    参数1: 获取数据的方式, GET、POST
        //    参数2: 向服务器请求数据的地址 格式: 例如:http://ip:8080/ajax/ajaxtest
        //    参数3: false 代表同步的方式请求数据,true 代表异步
        // xhr.open("GET", "http://127.0.0.1:8080/ajax/ajaxtest", false);
xhr.open("GET", "http://127.0.0.1:8080/ajax/ajaxtest", false);

// 3. 发送请求
xhr.send();

// 4. 获取数据
xhr.onreadystatechange = function() {
    if (req.readyState == 4) {
        if (req.status == 200) {
            // 200 说明返回的数据是正常的
            var str = req.responseText;
        }
    }
}

HTTP协议

HTTP是一个属于应用层的面向对象的协议, 由于其简捷,快速的方式, 适用于分布式超媒体信息系统.

HTTP协议的主要特点有:

 1, 支持客户端/服务端模式. 即请求(request)-响应(response)模式
 2, 简单快速,  客户端向服务端发送请求时, 只需要传送请求方式和路径即可,所以简单, 由于HTTP协议简单, 使得HTTP服务器的程序规模小, 因而速度很快;
 3, 灵活, 传输数据类型种类多
 4, 无连接,  请求一次服务器后立刻断开连接, 即非长连接, 即短连接
 5, 无状态,  HTTP协议对事务处理没有记忆能力; session

HTTP协议的请求方式: GET, POST, HEAD, PUT等 HTTP包含: 请求头和请求体 响应头和响应体

GET请求

在通过HTTP协议向服务器请求的过程中,有两种最常用的请求方式,分别是: GET和POST。在Ajax使用的过程中,GET的使用频率又要比POST高得多. GET请求最常用于向服务器获取数据。也可以将少量字符串参数提交给服务器。 xhr.open('get', 'demo.php?football=1&name=Koo', true);

用途: 向服务器传递数据 football=2 football=3

格式: 地址?参数名1=值1&参数名2=值2&参数名3=值3

通过URL后的问号?给服务器传递键值对数据,服务器接收到请求后可以从中获取到对应的数据

POST请求:

POST 请求可以包含非常多的数据,我们在使用表单提交的时候,很多就是使用的 POST 传输方式。
xhr.open('post', 'demo.php', true);

POST请求向服务器发送的数据,不会跟在URL后面,而是通过 send()方法向服务器提交数据。
xhr.send('name=Zhang&age=100');

POST请求和Web表单提交不同,需要使用 XHR 来模仿表单提交
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

GET与POST的对比

 共同点: 都是向服务器请求数据的方式
 GET                                                             
 数据放在地址栏后 ?reg=123&psw=123                                           
 数据量小                                                                      
 安全性低                                                                      
 传输速度快    
 POST
 send(数据参数)
 数据量大
 安全性高
 传输速度慢
字符编码:

特殊字符传参产生的问题可以使用encodeURIComponent()进行编码处理,中文字符的返回及传参,可以将页面保存和设置为 utf-8 格式即可.

//一个通用的函数给URL添加参数
addURLParam(url, name, value) {
    //判断的 url 是否有已有参数 , 添加?或者&来连接参数
    url += (url.indexOf('?') == -1 ? '?' : '&'); 
    url += encodeURIComponent(name) + '=' + encodeURIComponent(value); 
    return url;
}
请求头:

请求头包含HTTP的头部信息, 即服务器返回的响应头信息和客户端发送出去的请求头信息。我们可以获取响应头(response)信息或者设置请求头(request)信息。

//使用 getAllResponseHeaders()获取整个响应头信息
alert(xhr.getAllResponseHeaders());

//使用 getResponseHeader()获取单个响应头信息
alert(xhr.getResponseHeader('Content-Type'));

//使用 setRequestHeader()设置单个请求头信息 xhr.setRequestHeader('MyHeader', Zhang); //放在 open 方法之后,send 方法之前
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • AJAX 原生js操作ajax 1.创建XMLHttpRequest对象 var xhr = new XMLHtt...
    碧玉含香阅读 3,188评论 0 7
  • 一、HTTP服务 1.1 C/S和B/S B/S架构:即Broswer、Server,将所有的服务都可以通过浏览器...
    福尔摩鸡阅读 683评论 0 4
  • ajax作为前端开发必需的基础能力之一,你可能会使用它,但并不一定懂得其原理,以及更深入的服务器通信相关的知识。在...
    萧玄辞阅读 818评论 0 0
  • 大家好,我是IT修真院深圳分院第3期的学员,一枚正直纯洁善良的前端程序员,今天给大家分享一下,修真院官网前端工程师...
    大大头大阅读 7,617评论 1 72
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139