AJAX技术第一节 ---- XMLHttpRequest 和 数据交互

34 篇文章 0 订阅
31 篇文章 0 订阅

AJAX技术

即Asynchronous Javascript And XML ,AJAX不是一门新的语言,而是对现有技术的综合利用

本质:是在HTTP协议的基础上通过js的XMLHttpRequest对象与服务器进行通讯

作用:可以在页面不刷新的情况下,请求服务器局部更新页面的数据

同步与异步(了解)

指某段程序执行时不会阻塞其他程序执行,其变现形式为程序的执行顺序不依赖程序本身的书写顺序,相反就是同步

同步:同一时刻只能做一件事,上一步完成才能开始下一步

异步 : 同时做多件事情,效率更高,做一件事情时,不影响另一件事情的进行

XMLHyypRequest可以以异步方式处理程序

一. XMLHttpRequest

浏览器內间对象,用于在后台与服务器通讯(交换数据) 由此我们便可实现对网页的部分更新,而不是刷新整个页面

1.发送get请求

XMLHttpRequest以异步的方式发送HTTP请求,因此,在发送请求时一样需要遵循HTTP协议

// 使用XMLHttpRequest发送get请求的步骤
// 1. 创建一个XMLHttpRequest对象
var xhr = new XMLHttpRequery();
// 2.设置请求行
// 第一个参数:请求方式  get/post
// 第二个参数:请求地址  需要在url后面拼上参数列表
xhr.open('get','form.php?name=zs');
// 3.设置请求头
xhr.setRequestHeader('content-type','text/html');
// 浏览器会默认添加基本的请求头,het不用设置
// 4,设置请求体
// get请求的请求体为空,因为参数裂变拼接到url后面了
xhr.send(null);

get请求,设置请求行时,需要把参数列表拼接到url后面

get请求不用设置请求头

get请求的请求体为null

2.发送post请求

var xhr = new XMLHttpRequest();
//1. 设置请求行 post请求的参数列表在请求体中
xhr.open("post", "09.php");
//2. 设置请求头, post请求必须设置content-type,不然后端无法获取到数据
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
//3. 设置请求体
xhr.send("name=hucc&age=18");

post必须设置请求头中的content-type为application/x-www-form-urlencoded

post请求需要将参数列表设置到请求体中

3.获取响应

HTTP响应分为3个部分,状态行,响应头,响应体

//给xhr注册一个onreadystatechange事件,当xhr的状态发生状态发生改变时,会触发这个事件。
xhr.onreadystatechange = function () {
  if(xhr.readyState == 4){
    //1. 获取状态行
    console.log("状态行:"+xhr.status);
    //2. 获取响应头
    console.log("所有的相应头:"+xhr.getAllResponseHeaders());
    console.log("指定相应头:"+xhr.getResponseHeader("content-type"));
    //3. 获取响应体
    console.log(xhr.responseText);
  }
}

readyState

readyState:记录了XMLHttpRequest对象的当前状态

0: 请求未初始化(还没有调用 open( ))

1:请求已经建立,但是还没有发送(还没调用send( ))

2:请求已发送,正在处理中

3:请求正在处理中,通常响应已有部分数据可用了,但是服务器还没有完成响应的生成

4:响应已经完成:可以获取并使用服务器的响应了(我们只关心4即可)

总结:AJAX四部曲

//  1-创建一个XMLHttpReqeust对象
  var xhr = new XMLHttpRequest();
  console.log(xhr.readyState); // 0 
            
 //  2-设置请求报文
 //  2-1请求行
 xhr.open('get', './01-ajax.php');
 console.log(xhr.readyState);  // 1
 //  2-2请求头
 xhr.setRequestHeader('content-type', 'text/html');
 //  2-3请求主体  send()方法执行后,请求就已经发送出去了
 xhr.send(null);

 // 3-接受服务器返回的响应数据       
 xhr.onreadystatechange = function () {
     console.log(xhr.readyState);
      // 当服务器处理完成 并且成功处理了请求 获取服务器返回的数据 
      if (xhr.readyState == 4 && xhr.status == 200) {
          // 获取服务器返回的数据
          var result = xhr.responseText; // 获取服务器返回响应文本(响应主体)
          // console.log(result);
          //获取全部响应头
          console.log(xhr.getAllResponseHeaders());
          //获取指定响应头
          console.log(xhr.getResponseHeader('Content-Length'));
      }
}

二.数据交互

浏览器端知识负责用户的交互和数据的收集以及展示,真正的数据都是存储在服务器端的.

我们现在只能返回一些简单的数据(一个字符串),但是实际开发过程中,肯定会设计到大量的复杂累死俺的数据传输,比如数组,对象等,但是每个变成语言的语法都不一样,因此我们会通过数据交换格式(XML,JSON)来进行数据的交互

1.XML

什么是XML?

XML指可扩展标记语言(EXtensible Markup Language)

XML 是一种标记语言,很类似与HTML

XML的设置宗旨是传输数据,而非显示数据

XML标签没有被预定义,需要自己自定义标签

语法规范

1 . 第一行必须是版本信息

2 . 必须有一个根元素(有且仅有一个)

3 . 标签不能有空格,不能数字或者点 . 开头大小写敏感

4 . 不能交叉嵌套,都是双标签,如果是单标签,必须闭合

5 . 属性双引号(浏览器会自动修改成双引号)

6 . 特殊符号要使用实体

7 . 注释和HTML一样

//.xml
<students>
    <student>
        <name>张三</name>
        <age>18</age>
        <gender>男</gender>
        <desc>路人甲</desc>
    </student>
    <student>
        <name>李四</name>
        <age>20</age>
        <gender>男</gender>
        <desc>路人乙</desc>
    </student>
</students>

php获取xml文件的内容

//.php

//注意,如果需要返回xml数据,需要把content-type改成text/xml,不然浏览器以text/html进行解析。
header('content-type:text/xml;charset=utf-8');
//用于获取文件的内容
//参数:文件的路径
$result = file_get_contents("data.xml");
echo $result;

html解析xml

//获取服务端返回的xml数据,需要使用xhr.responseXML,这是一个document对象,可以使用DOM中的方法查找元素。
var data = xhr.responseXML;
//获取所有的学生
var students = data.querySelectorAll("student");

缺点:虽然可以描述和传输复杂数据,但是解析过于复杂并且体积大,所以很少有

2.JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交互格式,他基于ECMAScript规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据

1. 数据在名称/值对中

2. 数据由逗号分隔(最后一个键/值对不能带逗号)

3. 花括号保存对象,方括号保存数组

4. 键使用双引号

var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串

JSON数据在不同语言进行传输时,类型是字符串,不同的语言也有解析的方法,解析完才能读取

php处理json

1.php关联数组  --> json     json_encode()

// php的关联数组
$obj = array(
  "a"=>"hello",
  "b"=>"world",
  "name"=>"胡聪聪"
);
//json字符串
$json = json_encode($obj);
echo $json;

2. json  -->  php对象     json_decode()

$json = '{"a": "Hello", "b": "World"}';//json字符串
//第一个参数:json字符串
//第二个参数:
	//false,将json转换成对象(默认)
	//true:将对象转换成数组(推荐)
$obj = json_decode($json,true);
echo $obj['a'];

//通过json文件获取到的内容就是一个json字符串。
$data = file_get_contents("data.json");
//将json转换成数组
$result = json_decode($data, true);
print_r($result);

js处理json

1.js对象 --> json字符串   json.stringify(obj)

//obj是一个js对象
var obj = {a: 'Hello', b: 'World'}
//result就变成了一个json字符串了
var result = JSON.stringify(obj);// '{"a": "Hello", "b": "World"}'

2.json字符串  --> js对象json.parse(obj)

//json是一个json字符串
var json = '{"a": "Hello", "b": "World"}';
//obj就变成了一个js对象
var obj = JSON.parse(json);// {a: 'Hello', b: 'World'}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值