Ajax 的实现步骤、服务器端响应的数据格式、JSON.parse()

Ajax 的实现步骤

  1. 创建 Ajax 对象
var xhr = new XMLHttpRequest();
  1. 告诉 Ajax 请求地址以及请求方式
xhr.open('get', 'http://www.example.com');
  1. 发送请求
xhr.send();
  1. 获取服务器端给与客户端的响应数据
xhr.onload = function () {
     console.log(xhr.responseText);
 }

示例:

<script type="text/javascript">
	// 1.创建ajax对象
	var xhr = new XMLHttpRequest();
	// 2.告诉Ajax对象要向哪发送请求,以什么方式发送请求
	// 1)请求方式 2)请求地址
	xhr.open('get', 'http://localhost:3000/first');
	// 3.发送请求
	xhr.send();
	// 4.获取服务器端响应到客户端的数据
	xhr.onload = function (){
		console.log(xhr.responseText)
	}
</script>

服务器端响应的数据格式

在真实的项目中,服务器端大多数情况下会以 JSON 对象作为响应数据的格式。当客户端拿到响应数据时,要将 JSON 数据和 HTML 字符串进行拼接,然后将拼接的结果展示在页面中。

在 http 请求与响应的过程中,无论是请求参数还是响应内容,如果是对象类型,最终都会被转换为对象字符串进行传输。

JavaScript 标准内置对象JSON.parse()

语法

JSON.parse(text[, reviver])

。303.0.

参数 解释说明
text 要被解析成 JavaScript 值的字符串
reviver 可选参数,转换器, 如果传入该参数(函数),可以用来修改解析生成的原始值,调用时机在 parse 函数返回之前。

返回值 :Object 类型, 对应给定 JSON 文本的对象/值。

异常:若传入的字符串不符合 JSON 规范,则会抛出 SyntaxError异常。

使用JSON.parse()示例:

JSON.parse('{}');              // {}
JSON.parse('true');            // true
JSON.parse('"foo"');           // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null');            // null

使用reviver 函数:
如果指定了 reviver 函数,则解析出的 JavaScript 值(解析值)会经过一次转换后才将被最终返回(返回值)。更具体点讲就是:解析值本身以及它所包含的所有属性,会按照一定的顺序(从最最里层的属性开始,一级级往外,最终到达顶层,也就是解析值本身)分别的去调用 reviver 函数,在调用过程中,当前属性所属的对象会作为 this 值,当前属性名和属性值会分别作为第一个和第二个参数传入 reviver 中。如果 reviver 返回 undefined,则当前属性会从所属对象中删除,如果返回了其他值,则返回的值会成为当前属性新的属性值。

当遍历到最顶层的值(解析值)时,传入 reviver 函数的参数会是空字符串 “”(因为此时已经没有真正的属性)和当前的解析值(有可能已经被修改过了),当前的 this 值会是 {"": 修改过的解析值},在编写 reviver 函数时,要注意到这个特例。(这个函数的遍历顺序依照:从最内层开始,按照层级顺序,依次向外遍历)

JSON.parse('{"p": 5}', function (k, v) {
    if(k === '') return v;     // 如果到了最顶层,则直接返回属性值,
    return v * 2;              // 否则将属性值变为原来的 2 倍。
});                            // { p: 10 }

JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) {
    console.log(k); // 输出当前的属性名,从而得知遍历顺序是从内向外的,
                    // 最后一个属性名会是个空字符串。
    return v;       // 返回原始属性值,相当于没有传递 reviver 参数。
});

// 1
// 2
// 4
// 6
// 5
// 3 
// ""

JSON.parse() 不允许用逗号作为结尾

// both will throw a SyntaxError
JSON.parse("[1, 2, 3, 4, ]");
JSON.parse('{"foo" : 1, }');

处理服务器端返回的JSON数据示例:

<script type="text/javascript">
	// 1.创建ajax对象
	var xhr = new XMLHttpRequest();
	// 2.告诉Ajax对象要向哪发送请求,以什么方式发送请求
	// 1)请求方式 2)请求地址
	xhr.open('get', 'http://localhost:3000/responseData');
	// 3.发送请求
	xhr.send();
	// 4.获取服务器端响应到客户端的数据
	xhr.onload = function (){
		// console.log(typeof xhr.responseText)
		// 将JSON字符串转换为JSON对象
		var responseText = JSON.parse(xhr.responseText);
		// 测试:在控制台输出处理结果
		console.log(responseText)
		// 将数据和html字符串进行拼接
		var str = '<h2>'+ responseText.name +'</h2>';
		// 将拼接的结果追加到页面中
		document.body.innerHTML = str;
	}
</script>
发布了316 篇原创文章 · 获赞 270 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_44721831/article/details/104401709