javascriptAJAX是什么_如何与服务器进行数据交互【教程】

发布时间 - 2026-01-28 00:00:00    点击率:
AJAX 是用 JavaScript 发起 HTTP 请求、不刷新页面更新局部内容的实践方式,核心是 XMLHttpRequest 或 fetch(),关键在“异步”和“局部更新”;推荐优先使用 fetch(),因其语法简洁、基于 Promise、天然支持 async/await,而 XMLHttpRequest 需手动处理状态码、事件和响应体转换。

AJAX 不是某种新语言,而是用 JavaScript 发起 HTTP 请求、不刷新页面更新局部内容的一套实践方式。 它的核心是 XMLHttpRequest 或更现代的 fetch(),关键在于“异步”和“局部更新”——你改一个表单、点个按钮、下拉加载更多,背后都在用它。

为什么用 fetch() 而不是 XMLHttpRequest

除非要支持 IE11 及更老浏览器,否则直接用 fetch()。它语法简洁、基于 Promise、天然支持 async/await,而 XMLHttpRequest 需手动处理状态码、监听事件、转换响应体,容易写错。

常见坑:

  • fetch() 默认不带 cookie,需显式加 { credentials: 'include' } 才能传登录态
  • fetch() 只在网络失败时 reject,HTTP 状态码 404/500 不会触发 catch,得手动检查 response.ok
  • POST 提交 JSON 时,必须设 headers: { 'Content-Type': 'application/json' },否则后端可能收不到 body

fetch() 最简可用示例(GET 和 POST)

GET 请求(查数据):

const res = await fetch('/api/users?id=123');
const data = await res.json();
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(data);

POST 请求(发数据):

const res = await fetch('/api/comments', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ content: '你好', post_id: 42 })
});
const result = await res.json();

注意:JSON.stringify() 是必须的,fetch() 不会自动序列化对象;body 只接受字符串、FormDataBlob 等原生类型。

什么时候该用 FormData 而不是 JSON?

上传文件、或表单含 时,必须用 FormData。它能自动处理多部分编码(multipart/form-data),而 JSON 无法表示二进制文件。

实操要点:

  • 创建后直接 append 字段:const fd = new FormData(); fd.append

    ('title', '测试');
  • 传文件时,append 的第二个参数可以是 File 对象(来自 input.files[0]
  • 不用手动设 Content-Type 头——fetch() 会自动设置并带上边界符
  • 后端接收时,不能按 JSON 解析,得用 multipart 解析器(如 Express 的 multer

真正难的不是发请求,而是处理并发、取消重复请求、统一错误提示、缓存策略——这些没封装好,fetch() 写多了反而更乱。


# javascript  # java  # js  # json  # ajax  # cookie  # 编码  # 浏览器  # app  # 后端  # ai  # 状态码  # 为什么  # express  # 封装  # include 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python并发异常传播_错误处理解析【教程】  香港服务器如何优化才能显著提升网站加载速度?  Laravel怎么使用Intervention Image库处理图片上传和缩放  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  网站页面设计需要考虑到这些问题  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Android使用GridView实现日历的简单功能  如何在IIS管理器中快速创建并配置网站?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  IOS倒计时设置UIButton标题title的抖动问题  如何在自有机房高效搭建专业网站?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  如何在宝塔面板中修改默认建站目录?  实例解析Array和String方法  如何快速搭建自助建站会员专属系统?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Laravel Fortify是什么,和Jetstream有什么关系  如何快速搭建高效可靠的建站解决方案?  如何在阿里云完成域名注册与建站?  如何做网站制作流程,*游戏网站怎么搭建?  Laravel如何使用Eloquent进行子查询  如何制作一个表白网站视频,关于勇敢表白的小标题?  网站图片在线制作软件,怎么在图片上做链接?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  企业网站制作这些问题要关注  ,在苏州找工作,上哪个网站比较好?  Laravel如何实现API版本控制_Laravel版本化API设计方案  JS去除重复并统计数量的实现方法  Android仿QQ列表左滑删除操作  java ZXing生成二维码及条码实例分享  如何选择PHP开源工具快速搭建网站?  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何快速配置高效服务器建站软件?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  如何确保西部建站助手FTP传输的安全性?  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  北京企业网站设计制作公司,北京铁路集团官方网站?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  浅析上传头像示例及其注意事项  jQuery中的100个技巧汇总  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  ,交易猫的商品怎么发布到网站上去?  Linux系统运维自动化项目教程_Ansible批量管理实战