JavaScript 知识量:26 - 101 - 483
Fetch API是一种现代的JavaScript API,用于进行网络请求和处理响应数据。它提供了一种更简单和更灵活的方式来执行网络请求,取代了传统的XMLHttpRequest(XHR)接口。Fetch API基于Promise对象,可以用于替代传统的XMLHttpRequest接口,并且具有更好的性能和更丰富的功能。
Fetch API的基本用法如下:
fetch(url) .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => { console.log(data); }) .catch(error => { console.error(error); });
在这个例子中,fetch(url)发起一个HTTP请求到指定的URL,并返回一个Promise对象。当服务器响应请求时,该Promise对象将被解析为Response对象,然后可以通过调用response.json()方法将其解析为JSON格式的数据。最后,可以在控制台中打印出获取到的数据。
如果服务器响应不是2xx范围,则response.ok将返回false,可以抛出一个错误来处理这种情况。如果需要处理其他类型的响应,可以使用response.status和response.statusText等属性来获取更多信息。
除了处理JSON格式的数据,Fetch API还支持处理其他类型的数据,如文本、Blob等。此外,Fetch API还支持设置请求头、发送POST请求等操作,以及在服务端进行跨域请求时的CORS处理等功能。
Fetch API 是一种现代的网络请求方式,它提供了强大的功能和更好的性能。与 XMLHttpRequest 相比,Fetch API 使用 Promise 对象,使得异步操作更加简洁和易于管理。
在使用 Fetch API 时,常见的请求模式包括:
1. GET 请求:用于从服务器获取数据。在 Fetch API 中,可以通过传递一个 URL 字符串给 fetch() 方法来发送 GET 请求。例如:
fetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data));
2. POST 请求:用于向服务器发送数据。在 Fetch API 中,可以通过传递一个 init 对象给 fetch() 方法来发送 POST 请求。init 对象中可以包含一个 body 属性,用于指定请求体中的数据。例如:
fetch('https://api.example.com/data', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'John', age: 30 }) }) .then(response => response.json()) .then(data => console.log(data));
3. PUT 请求:用于更新服务器上的数据。PUT 请求与 POST 请求类似,可以通过传递一个 init 对象给 fetch() 方法来发送 PUT 请求。例如:
fetch('https://api.example.com/data/1', { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'John', age: 35 }) }) .then(response => response.json()) .then(data => console.log(data));
4. DELETE 请求:用于从服务器删除数据。可以通过传递一个 URL 字符串给 fetch() 方法来发送 DELETE 请求。例如:
fetch('https://api.example.com/data/1', { method: 'DELETE' }) .then(response => response.json()) .then(data => console.log(data));
JavaScript中的Headers对象是Fetch API的一部分,用于设置或获取HTTP请求的头部信息。它类似于一个键值对集合,其中的键是头部字段的名称,值是对应的头部字段的值。
以下是如何使用Headers对象的一些示例:
// 创建一个新的Headers对象 let myHeaders = new Headers(); // 添加一个新的头部字段和值 myHeaders.append('Content-Type', 'image/jpeg'); // 另一种添加头部字段和值的方法 myHeaders.set('Content-Length', '12345'); // 获取特定的头部字段的值 let contentType = myHeaders.get('Content-Type'); // 检查特定的头部字段是否存在 if (myHeaders.has('Content-Length')) { // do something }
也可以在创建新的Headers对象时直接传入一个包含键值对的对象,如下所示:
let myHeaders = new Headers({ 'Content-Type': 'image/jpeg', 'Content-Length': '12345' });
注意:不是所有的HTTP请求都可以包含所有的头部字段。某些字段(如Content-Length)可能只适用于某些类型的请求。如果尝试设置不适用的头部字段,浏览器可能会忽略这个设置,或者抛出一个错误。因此,在使用Headers对象时,需要确保正在设置的头部字段和值是合适的。
Request对象用于表示一个HTTP请求。Request对象包含关于请求的各种信息,包括请求的URL、方法(GET、POST等)、头部信息、以及请求体。
下面是一个使用Request对象的简单示例:
let myRequest = new Request('https://api.example.com/data', { method: 'GET', headers: new Headers(), mode: 'cors', cache: 'default', credentials: 'include' });
在这个例子中,创建了一个新的Request对象,请求URL为https://api.example.com/data,使用GET方法,设置了CORS模式,并包含了credentials(例如cookies)。
也可以使用fetch()函数,它返回一个Promise,当服务器响应请求时,这个Promise将会解析为Response对象。例如:
fetch(myRequest) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.log('Error:', error));
在这个例子中,使用fetch()函数发送请求,然后使用.then()方法处理返回的Response对象。首先,将响应解析为JSON,然后将数据打印到控制台。如果在处理过程中出现错误,将在控制台中打印错误信息。
Response对象用于表示服务器对请求的响应。Response对象包含响应的内容,包括文本、JSON、Blob等,还包含响应的头部信息。
以下是一些使用Response对象的示例:
1. 获取响应内容
可以使用Response对象的text()、json()、blob()等方法获取响应的内容。例如:
fetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.log('Error:', error));
在这个例子中,使用fetch()函数发送请求,然后使用Response对象的json()方法将响应解析为JSON对象,并将数据打印到控制台。
2. 获取响应状态码
可以使用Response对象的status属性获取响应的状态码。例如:
fetch('https://api.example.com/data') .then(response => { if (response.status === 200) { return response.json(); } else { throw new Error('Error: ' + response.status); } }) .then(data => console.log(data)) .catch(error => console.log('Error:', error));
在这个例子中,使用Response对象的status属性检查响应的状态码是否为200,如果是,则将响应解析为JSON对象,否则抛出一个错误。
3. 获取响应头部信息
可以使用Response对象的headers属性获取响应的头部信息。例如:
fetch('https://api.example.com/data') .then(response => { let contentType = response.headers.get('content-type'); if (contentType && contentType.includes('application/json')) { return response.json(); } else { throw new Error('Error: Invalid content-type'); } }) .then(data => console.log(data)) .catch(error => console.log('Error:', error));
在这个例子中,使用Response对象的headers属性获取响应的content-type头部信息,并检查它是否包含application/json。如果是,则将响应解析为JSON对象,否则抛出一个错误。
在Fetch API中,Request对象表示一个HTTP请求,它包含请求的URL、方法(GET、POST等)、头部信息、以及请求体。Request对象可以通过使用Body混入来设置或获取请求的有效载荷。
例如,当使用fetch()函数发起一个POST请求时,可以将请求体作为参数传递给fetch()函数。这样,fetch()函数将创建一个新的Request对象,并将请求体设置为该对象的有效载荷。
fetch('https://api.example.com/data', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'John', age: 30 }) });
在上面的例子中,使用JSON.stringify()方法将一个JavaScript对象转换为JSON字符串,并将其作为请求体传递给fetch()函数。这样,该对象将作为有效载荷被发送到服务器。
另一方面,Response对象表示服务器对请求的响应。它也使用了Fetch API的Body混入来实现其承载响应有效载荷的能力。
当服务器对请求进行响应时,响应体包含在Response对象中。可以使用Response对象的text()、json()、blob()等方法来获取响应体的内容。这些方法将解析响应体并返回解析后的结果。
例如,当服务器响应一个POST请求时,响应体可能包含JSON数据。可以使用Response对象的json()方法将响应体解析为JSON对象。
fetch('https://api.example.com/data', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'John', age: 30 }) }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.log('Error:', error));
在上面的例子中,使用Response对象的json()方法将响应体解析为JSON对象,并将其打印到控制台。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6