要将jQuery的$.ajax
转换为原生的fetch
,你需要理解两者之间的差异,并相应地调整代码。以下是一个基本的转换示例:
$.ajax({
url: 'https://api.example.com/data',
method: 'GET',
dataType: 'json',
success: function(data) {
console.log('Success:', data);
},
error: function(xhr, status, error) {
console.error('Error:', error);
}
});
fetch('https://api.example.com/data', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
})
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Success:', data);
})
.catch(error => {
console.error('Error:', error);
});
$.ajax
中的url
和method
直接对应于fetch
的第一个参数和method
选项。dataType: 'json'
在fetch
中通常不需要显式指定,因为fetch
默认返回一个Response
对象,你可以使用.json()
方法来解析JSON数据。$.ajax
的success
和error
回调函数在fetch
中通过.then()
和.catch()
来处理。fetch
的响应对象有一个ok
属性,用于检查HTTP状态码是否在200-299范围内。如果不是,你可以抛出一个错误。Content-Type
),可以在fetch
的第二个参数中通过headers
选项来设置。如果你需要发送POST请求,可以这样转换:
$.ajax({
url: 'https://api.example.com/data',
method: 'POST',
data: JSON.stringify({ key: 'value' }),
contentType: 'application/json',
success: function(data) {
console.log('Success:', data);
},
error: function(xhr, status, error) {
console.error('Error:', error);
}
});
fetch('https://api.example.com/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ key: 'value' })
})
.then(response => response.json())
.then(data => {
console.log('Success:', data);
})
.catch(error => {
console.error('Error:', error);
});
fetch
不会发送或接收任何cookies,除非你明确设置了credentials
选项。fetch
的错误处理是基于HTTP状态码的,而不是基于网络错误的(如DNS查找失败)。这意味着即使网络请求失败(如断网),fetch
也不会reject,除非服务器返回一个错误的状态码。通过这些转换,你应该能够将大多数$.ajax
调用转换为fetch
。
领取专属 10元无门槛券
手把手带您无忧上云