0

0

javascript ajax如何实现_怎样发起网络请求【教程】

紅蓮之龍

紅蓮之龍

发布时间:2026-01-19 20:42:36

|

367人浏览过

|

来源于php中文网

原创

现代 javascript 推荐用 fetch 发起 get 请求,最简写法为 fetch('/api/user'),但需注意默认不带 cookie、http 错误码不会自动 reject,且响应体需手动解析。

javascript ajax如何实现_怎样发起网络请求【教程】

fetch 发起 GET 请求最简写法

现代 JavaScript 推荐直接用 fetch,它比 XMLHttpRequest 更简洁、更符合 Promise 语义。发起一个基础 GET 请求只需一行核心代码,但要注意它**默认不带 cookie,且不会自动 reject 网络错误(如 404、500)**。

  • fetch 返回 Promise,但只在网络失败(如断网、DNS 错误)时 reject;HTTP 状态码如 404、500 仍会 resolve,需手动检查 response.okresponse.status
  • 若需携带 cookie,必须显式传 { credentials: 'include' },否则服务端收不到 session
  • 响应体不是 JSON 对象,而是 Response 实例,需调用 .json().text() 等方法读取
fetch('/api/user')
  .then(response => {
    if (!response.ok) throw new Error(`HTTP ${response.status}`);
    return response.json();
  })
  .then(data => console.log(data))
  .catch(err => console.error('请求失败:', err));

POST 提交 JSON 数据要设好 headers

fetch 发 POST 请求时,如果后端期待 Content-Type: application/json,就必须手动设置 headers,否则 Express、Django 等框架默认不解析请求体。

  • 忘记设 headers 是最常见 400 错误来源之一,后端日志常显示 “no JSON data” 或 “body is empty”
  • body 必须是字符串,所以得先 JSON.stringify(),不能直接传对象
  • GET 请求的 query 参数需手动拼接进 URL,fetch 不处理 URL 编码,要用 URLSearchParamsencodeURIComponent
fetch('/api/login', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ username: 'admin', password: '123' })
})
.then(r => r.json())
.catch(e => console.error(e));

async/await 写更清晰的错误处理

链式 .then().catch() 容易漏掉中间环节的异常,尤其涉及多个异步步骤(如先 fetch 再处理数据再更新 DOM)时。async/await 让错误捕获更直观,也方便复用 try/catch 块。

TemPolor
TemPolor

AI音乐生成器,一键创作免版税音乐

下载
  • 不要在 await fetch(...) 后直接 await response.json(),因为 .json() 也可能抛错(如返回非 JSON 内容)
  • 建议把 response.json() 封装成独立 await 步骤,并检查 response.ok
  • 避免在顶层函数用 async 却不 await,会导致未处理的 Promise rejection
async function loadUser(id) {
  try {
    const response = await fetch(`/api/user/${id}`);
    if (!response.ok) throw new Error(`HTTP ${response.status}`);
    const data = await response.json(); // 这里可能 SyntaxError
    return data;
  } catch (err) {
    console.error('加载用户失败:', err.message);
    throw err;
  }
}

兼容旧浏览器时别硬扛,用 XMLHttpRequest 或 polyfill

IE11 及更早版本不支持 fetch,如果项目必须支持,不要自己重写全套逻辑。要么引入轻量 polyfill(如 whatwg-fetch),要么退回到 XMLHttpRequest —— 但注意它的回调机制和错误触发时机与 fetch 不同。

立即学习Java免费学习笔记(深入)”;

  • XMLHttpRequestonerror 只在真正网络失败时触发,而 onload 总是执行,需手动判断 xhr.status
  • 设置请求头用 xhr.setRequestHeader(),且必须在 xhr.open() 之后、xhr.send() 之前
  • IE 对 withCredentials(即 cookie)的支持从 IE10 开始,且需服务端明确允许(Access-Control-Allow-Credentials: true

真正麻烦的不是语法,而是跨域、cookie、重定向、超时控制这些细节在两种 API 中行为不一致。能用 fetch 就别倒退,除非明确知道目标环境限制。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python Web 框架 Django 深度开发
Python Web 框架 Django 深度开发

本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。

162

2026.02.04

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

454

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

334

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

166

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

170

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

124

2023.11.15

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.9万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号