js原生ajax(Js原生过去src)

[img]

简介:

AJAX(Asynchronous JavaScript and XML)即异步JavaScript和XML,是一种用于创建快速动态网页的技术,使网页可以在不刷新的情况下更新部分数据。JS原生的AJAX可以避免使用第三方插件和库,更加轻便、灵活。

多级标题:

一、XMLHttpRequest对象

二、AJAX流程

三、AJAX请求方式

四、AJAX发送数据

五、AJAX回调函数

六、异步请求与同步请求的区别

详细内容:

一、XMLHttpRequest对象

XMLHttpRequest对象是AJAX的核心,通过它可以与服务器异步通信。通过调用该对象的open()方法和send()方法,可以向服务器发送请求并接收服务器返回的数据。

```javascript

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function(){

if(xhr.readyState === 4 && xhr.status === 200){

console.log(xhr.responseText);

}

};

xhr.open('GET', 'http://localhost:3000/data', true);

xhr.send(null);

```

上述代码中,new一个XMLHttpRequest对象,设置响应函数,调用open()方法和send()方法向服务器发送GET请求,其中true表示异步请求。

二、AJAX流程

AJAX请求的流程主要包括以下步骤:

1. 创建XMLHttpRequest对象;

2. 设置响应函数;

3. 调用open()方法和send()方法发送请求;

4. 服务器处理请求并返回数据;

5. 浏览器接收响应数据并进行处理。

三、AJAX请求方式

AJAX可以发送多种请求,主要包括以下几种:

1. GET请求:通过URL传递参数,常用于请求数据;

2. POST请求:通过HTTP请求体传递参数,常用于提交数据;

3. HEAD请求:仅返回响应头信息;

4. OPTIONS请求:用于查询服务器支持哪些请求方法。

四、AJAX发送数据

通过send()方法发送请求时,还可以向服务器发送数据。主要可分为两种方式:

1. 表单数据:将表单里的数据序列化后作为请求的数据发送,适用于POST请求。

```javascript

var xhr = new XMLHttpRequest();

xhr.open('POST', 'http://localhost:3000/data', true);

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

xhr.send('username=' + encodeURIComponent(username) + '&password=' + encodeURIComponent(password));

```

2. JSON数据:将JS对象序列化成JSON数据发送,适用于POST和GET请求。

```javascript

var xhr = new XMLHttpRequest();

xhr.open('POST', 'http://localhost:3000/data', true);

xhr.setRequestHeader('Content-Type', 'application/json');

xhr.send(JSON.stringify(data));

```

五、AJAX回调函数

当XHR对象状态发生改变时,会触发readyStateChange事件,通过设置回调函数来处理服务器响应结果。主要包括以下几种:

1. onreadystatechange:XHR对象状态改变时的回调函数;

2. onloadstart:XHR对象开始发送请求时的回调函数;

3. onprogress:XHR对象接收到数据时的回调函数;

4. onload:XHR对象请求成功时的回调函数;

5. ontimeout:XHR对象请求超时时的回调函数;

6. onerror:XHR对象请求发生错误时的回调函数。

六、异步请求与同步请求的区别

AJAX可以实现异步请求,也可以实现同步请求。异步请求与同步请求的主要区别在于请求发送后,是否会阻塞后续代码的执行。异步请求不会阻塞后续代码,而同步请求会一直等待服务器响应,直到响应返回才会执行后续代码。

```javascript

//异步请求

var xhr = new XMLHttpRequest();

xhr.open('GET', 'http://localhost:3000/data', true);

xhr.onreadystatechange = function(){

if(xhr.readyState === 4 && xhr.status === 200){

console.log(xhr.responseText);

}

};

xhr.send(null);

//同步请求

var xhr = new XMLHttpRequest();

xhr.open('GET', 'http://localhost:3000/data', false);

xhr.send(null);

if(xhr.readyState === 4 && xhr.status === 200){

console.log(xhr.responseText);

```

标签列表