你不需要jQuery(三) 新AJAX方法fetch()

seo优化 2025-04-25 06:47www.168986.cn长沙seo优化

通过实例比较XMLHttpRequest与新的AJAX方法fetch()之间的不同

随着技术的发展,XMLHttpRequest这种老牌的AJAX方式逐渐显得过时,而fetch()方法为我们提供了更为简洁、现代的解决方案。它们之间的主要区别在于,Fetch API使得接口更为简单、直观,避免了回调的复杂性,无需使用复杂的XMLHttpRequest API。

让我们通过一个简单的例子来直观感受两者的差异。假设我们需要请求一个URL并获取返回的JSON数据。

如果使用XMLHttpRequest,我们需要设置两个监听器来捕捉成功和错误的情况,同时需要调用open()和send()方法。示例代码如下:

```javascript

function reqListener() {

var data = JSON.parse(this.responseText);

console.log(data);

}

function reqError(err) {

console.log('Fetch Error :-S', err);

}

var oReq = new XMLHttpRequest();

oReq.onload = reqListener;

oReq.onerror = reqError;

oReq.open('get', './api/some.json', true);

oReq.send();

```

而使用fetch(),我们的代码将更为简洁。我们发出fetch请求,然后检查响应的状态是否为200。如果是,我们将响应数据转换为JSON并处理;如果不是,我们则处理错误。示例代码如下:

```javascript

fetch('./api/some.json')

.then(response => {

if (response.status !== 200) {

console.log('Looks like there was a problem. Status Code: ' + response.status);

return;

}

response.json().then(data => {

console.log(data);

});

})

.catch(err => {

console.log('Fetch Error :-S', err);

});

```

fetch()还允许我们访问响应对象的元数据,例如内容类型、日期、状态、状态文本、类型和URL等。例如,我们可以使用以下代码获取这些元数据信息:

```javascript

fetch('users.json')

.then(response => {

console.log(response.headers.get('Content-Type'));

console.log(response.headers.get('Date'));

console.log(response.status);

console.log(response.statusText);

console.log(response.type);

console.log(response.url);

});

```

当我们执行一个fetch请求时,响应的数据的类型(response.type)可以是“basic”、“cors”或“opaque”。这些类型告诉我们应该如何处理这些数据以及数据的来源。

虽然XMLHttpRequest仍然可以完成AJAX任务,但fetch()方法提供了更为简洁、现代的解决方案,使得处理AJAX请求更为方便、直观。在一个典型的网络应用中,跨域资源共享(CORS)扮演着至关重要的角色。当请求发起自同一个域时,响应的类型通常为“basic”,此时对响应内容的访问不受任何限制。当请求来自不同的域时,我们需要考虑CORS机制以确保安全。

当请求来自某个不同的域且响应包含CORS头信息时,响应的类型为“cors”。这种类型的响应与“basic”响应在大多数情况下相似,但在访问响应头信息方面有所限制。你只能查看如`Cache-Control`、`Content-Language`、`Content-Type`、`Expires`、`Last-Modified`和`Pragma`等特定的头信息。

还存在一种被称为“opaque”的响应类型。当请求来自一个域但不具备CORS头信息时,就会出现这种情况。这种类型的响应无法被读取,我们无法知道请求是否成功,也无法获取任何有关响应状态的信息。当前的fetch()实现无法处理这种请求。

在处理跨域请求时,我们可以使用fetch方法的模式参数来指定请求的模式。这些模式包括:

“same-origin”:只有来自相同域的请求才能成功;

“cors”:允许跨域请求,但需要正确的CORS头信息;

“cors-with-forced-preflight”:在执行实际请求之前先进行预检(preflight)检查;

“no-cors”:目前这种模式无法执行。

我们可以使用fetch函数来发起跨域请求,并通过串联Promises来处理响应。例如:

```javascript

fetch(' {mode: 'cors'})

.then(response => {

// 检查响应状态并成JSON对象

return status(response).then(json);

})

.then(data => {

console.log('请求成功,返回JSON数据', data);

})

.catch(error => {

console.log('请求失败', error);

});

```

在这个例子中,我们首先使用status函数检查响应状态,如果状态码在200到300之间,我们将其为JSON对象。这个流程使得代码更加条理清晰,易于维护。通过串联Promises,我们可以共享一些业务逻辑,提高代码的可读性和可测试性。这种处理方式也有助于处理复杂的异步操作,提高代码的健壮性。现代Web开发中的Fetch API表单数据提交

在Web开发中,表单数据提交是一个基础且常见的操作。借助Fetch API,这一操作变得更为简洁高效。

Fetch API以其简洁性和灵活性脱颖而出,主要得益于其method和body参数选项。想象一下这样的场景:你有一个表单,用户填写完毕后需要提交。使用Fetch API,你可以轻松实现这一功能。

示例代码如下:

```javascript

fetch(url, {

method: 'post', // 指定请求方法为POST

headers: { // 设置请求头

"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"

},

body: 'foo=bar&lorem=ipsum' // 这里是表单数据,以键值对的形式传递

})

.then(response => response.json()) // 将响应转换为JSON格式

.then(data => {

console.log('请求成功,返回的数据是:', data); // 如果请求成功,打印返回的数据

})

.catch(error => {

console.log('请求失败,错误详情:', error); // 如果请求失败,捕获错误并打印

});

```

除了上述基本用法,Fetch API还允许你在请求中附带用户身份凭证信息。如果你想在fetch请求里附带cookies等凭证信息,只需将credentials参数设置为“include”即可。这样,你的请求就会自动携带这些凭证信息。

示例代码如下:

```javascript

fetch(url, {

credentials: 'include' // 允许携带用户身份凭证信息

});

```

Fetch API相较于传统的XMLHttpRequest(XHR)更为简洁,与jQuery中的ajax API相比也毫不逊色。它提供了强大的功能,使得异步操作变得更为简单和直观。无论是在表单提交还是其他网络请求场景中,Fetch API都是一个值得你深入学习和掌握的工具。希望本文的内容能对大家的学习有所帮助,也希望大家能够支持狼蚁SEO,共同更多Web开发的奥秘。

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by