怎么用JS向服务器发送请求数据?,有哪些常用方法?

在JavaScript里,向服务器发送请求数据最直接的方式是使用fetch API,它在现代浏览器中原生支持,返回Promise,配合async/await读起来像同步代码。

如果你接手过老项目,大概见过XMLHttpRequest那个密集型写法,别担心,后端接口数量再多,前端请求的套路就那么几样,下面从方案选择、代码示例到踩坑清单,一次性说透。

fetch经典用法:发送get和post请求
加载中
fetch经典用法:发送get和post请求
前
前端周老师
3005--
原视频地址

js 请求接口数据的方式:fetch与XMLHttpRequest之选

要用js向服务器发数据,先得选工具,浏览器内置的有两套:XMLHttpRequest(简称XHR)和fetch,前者从IE时代就存在,后者是ES2015之后的标准接口,业内专家指出,新项目默认选fetch,只有需要监听上传进度这类特殊场景才考虑XHR。

原生js发送请求:从XHR到fetch的演进

XHR典型写法是四步走:

const xhr = new XMLHttpRequest();
xhr.open('GET', '/api/user');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
  }
};
xhr.send();

这套模式的问题在于回调嵌套和状态管理,fetch把过程压缩成一次调用,返回Promise对象:

fetch('/api/user')
  .then(res => res.json())
  .then(data => console.log(data));

相比之下,fetch的语法更扁平,如果后端返回的是JSON,一行res.json()就解析完毕,近年来浏览器对fetch的支持趋于一致,大多数线上项目可以直接使用它。

fetch与XMLHttpRequest的优劣势对比

对比项 fetch XMLHttpRequest
语法复杂度 简单,Promise链式调用 繁琐,事件回调
默认带凭据 不带,需显式配置 同源默认带Cookie
上传进度监听 不支持原生进度事件 支持
请求中断 支持AbortController 支持abort()
兼容性 现代浏览器均支持 老版本浏览器支持更全

选择其实不复杂:绝大多数请求用fetch,特殊场景用XHR,比如上传大文件需要显示进度条,XHR的upload.onprogress依然好用。

js ajax请求怎么写的实操示例:GET与POST全流程

工具选好,直接看代码,这里以调后端接口为例,把GET和POST两条主路径走一遍。

GET请求:从接口读取数据

GET一般用来查询数据,用fetch可以这么做:

async function getUser(id) {
  const response = await fetch(`/api/user?id=${id}`);
  if (!response.ok) {
    throw new Error(`请求失败:${response.status}`);
  }
  const data = await response.json();
  return data;
}

要注意,fetch只有在网络层报错时才会reject,HTTP状态码404、500同样会走到response返回,所以response.ok这层判断不能省。

fetch post请求示例:向服务器提交数据

POST一般用于新增或提交表单,下面是一段完整的fetch post请求示例:

async function createUser(userInfo) {
  const response = await fetch('/api/user', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(userInfo)
  });
  const result = await response.json();
  return result;
}

很多新手在这里栽跟头:body直接传对象,忘记JSON.stringify,fetch底层会把对象toString,结果变成”[object Object]”,服务端根本解析不出字段。

发送JSON与表单数据的区别

  • JSON数据:headers里声明Content-Type为application/json,body用JSON.stringify序列化。
  • 普通表单:headers设为application/x-www-form-urlencoded,body用URLSearchParams拼接键值对。
  • 文件上传:把FormData对象直接传给body,浏览器会自动补上multipart/form-data边界,不要手动指定Content-Type。

处理服务器响应与异常:别让数据悄悄消失

请求发出去只是第一步,拿到响应、解析数据、处理异常同样关键。

怎么用js接收服务器返回的数据

响应对象上有三个常用解析方法:

  • response.json():把响应体按JSON解析,返回Promise,后端给的是对象或数组时用。
  • response.text():拿原始字符串,适合接口返回纯文本。
  • response.blob():拿二进制流,下载文件时用。

一个典型场景:

const response = await fetch('/api/order/export');
if (response.ok) {
  const blob = await response.blob();
  const url = URL.createObjectURL(blob);
  window.location.href = url;
}

请求超时与主动中断

fetch没有内置超时配置,需要结合AbortController实现:

const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 5000);
try {
  const response = await fetch('/api/data', {
    signal: controller.signal
  });
  // 正常处理
} catch (err) {
  if (err.name === 'AbortError') {
    console.log('请求超时,已中断');
  }
} finally {
  clearTimeout(timeoutId);
}

这招在弱网环境下很实用,用户点取消、切页面、重复提交时,同样可以通过abort来避免多余的响应覆盖界面。

js 向服务器发送post请求时的常见坑与解决

POST请求相比GET,更容易因为格式问题被后端打回,整理几个高频坑位。

跨域请求被拦截

前端页面在a.com,接口在b.com,浏览器会拦截跨域请求,解决办法是让服务端返回CORS响应头,允许前端来源访问,前端在fetch里可以显式写:

fetch('https://b.com/api/data', {
  method: 'POST',
  credentials: 'include',
  mode: 'cors'
});

注意credentials: include表示跨域时携带凭证,同时服务端Access-Control-Allow-Origin不能写星号,必须指定具体来源。

Content-Type写错导致数据到不了后端

  • 发JSON字符串:Content-Type必须是application/json。
  • 发查询字符串:Content-Type通常是application/x-www-form-urlencoded。
  • 发FormData:不要手动设Content-Type,浏览器会生成带boundary的完整头。

GET请求传了request body导致报错

有一些后端框架,如Spring的某些版本,会直接忽略GET请求附带body,正确的做法是把参数拼到URL上,或者改用POST。

端口与本地代理的坑

开发环境下前后端端口不同,直连接口会撞上CORS,常见的处理方式是配置webpack devServer的proxy,或者用vite的server.proxy把/api前缀转发到后端服务,这样前端请求看起来是同源的。

关于js请求服务器数据的常见问题

js发送请求时怎么处理跨域?

优先让后端加上CORS相关响应头,如果只是开发阶段,用构建工具的代理转发更省事,JSONP这种老办法只适配GET接口,而且需要服务端配合包一层callback,现在很少用了。

用fetch发送post请求时content-type应该设成什么?

取决于发送的payload类型,JSON对象用application/json,URL编码表单用application/x-www-form-urlencoded,FormData对象不用手动指定,浏览器自动处理。

fetch和axios怎么选?

axios是对XMLHttpRequest的封装,支持请求拦截器、取消请求、自动转换JSON,fetch是浏览器原生能力,不用引包,轻量直接,如果你只在两三个页面发少量请求,fetch完全够用,如果项目里全局接口较多,需要统一管理拦截器、错误码、token注入,axios这类封装库更顺手。

说到底,js向服务器发送请求数据就是fetch和XMLHttpRequest两种工具,新代码优先fetch,出现特殊需求再回到XHR,把请求格式写对、状态码判断好、跨域配置对,数据交互就不会出大乱子。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/772720.html

赞 (0)
上一篇 2026年10月22日 10:56
下一篇 2026年10月22日 10:57

相关推荐

  • 广州稳定bgp高防ip解决方案怎么选?高防服务器哪家好

    针对2026年华南地区频发的Tbps级DDoS与CC攻击,广州稳定BGP高防IP解决方案的核心在于:依托本地T级清洗中心与动态BGP智能路由调度,实现秒级攻击剥离与全网低延迟访问,是保障业务连续性与合规性的最优解,2026广州网络安全态势与高防刚需攻击演进:从流量压制到应用层穿透根据【国家计算机网络应急技术处理……

    2026年4月29日
    5900
  • t440戴尔服务器raid1怎么做

    戴尔T440服务器做RAID1,核心流程就是开机进PERC BIOS按Ctrl+R创建虚拟磁盘,选两块盘做镜像,初始化后装系统,整个过程不到十分钟,别被”RAID配置”几个字唬住,它其实就是一个图形化的菜单操作,下面我把每个步骤拆开讲透,T440服务器RAID1怎么做:核心配置流程开机进配置界面的关键时机T44……

    2026年8月26日
    1000
  • AIoT智慧空间是什么?AIoT智慧空间解决方案有哪些

    AIoT智慧空间并非简单的设备联网,而是通过感知、决策与执行的闭环,实现从“被动响应”到“主动服务”的空间进化,其核心价值在于显著提升居住舒适度与能源效率,什么是真正的AIoT智慧空间很多人对智能家居的理解还停留在“用手机控制开关”的阶段,这其实是2.0时代的产物,真正的3.0时代——AIoT(人工智能物联网……

    2026年6月11日
    3100
  • AIoT时代发布会有什么亮点?AIoT发布会最新消息

    AIoT时代的发布会已不再仅仅是产品的展示舞台,而是企业技术战略与生态布局的终极考场,核心结论在于:一场成功的AIoT时代发布会,必须完成从“单一硬件发布”向“全场景生态落地”的范式转移,其成败关键取决于技术硬核度、场景穿透力以及生态开放性这三个维度的深度整合, 这不仅是品牌实力的秀场,更是定义未来智能生活方式……

    2026年3月22日
    10100
  • 服务器坏了如何导出用友U8数据,服务器硬盘坏了数据能恢复吗?

    服务器坏了不代表U8数据没了,只要数据库文件、备份文件或硬盘镜像还能读出来,多数情况下都能通过附加数据库、修复置疑或重新引入账套把数据导出来,用友U8服务器坏了数据怎么导出:先判断故障层级服务器坏掉的症状不一样,数据抢救路线完全不同,直接重装系统或反复重启,很容易把原本能恢复的U8账套数据搞砸,动手前先按下面几……

    2026年9月15日
    300
  • 金蝶K3安装好怎么连接服务器,连接不上怎么解决?

    金蝶K3安装完成后,连接服务器的核心就是让客户端通过“中间层组件”指向你的服务器地址,并确保网络、端口和防火墙设置允许通信,无论你是单机版还是局域网多用户版,跟着下面的步骤操作,基本都能顺利连上,下面我直接给你梳理一套从零开始的完整连接流程,连接服务器前的准备工作这一步很多人直接跳过,结果后面连不上又回去排查……

    程序编程 2026年10月22日
    000
  • 欧洲服务器国内访问普遍丢包是什么原因?,欧洲服务器丢包怎么解决

    欧洲服务器在国内访问丢包几乎是必然现象,根本原因在于国际链路物理距离长、路由节点多以及国内运营商出海口拥堵,但通过优化路由(如CN2 GIA/CMI)、使用专线或靠谱的持牌服务商可以大幅缓解,丢包背后的物理现实海底光缆与地理距离欧洲和亚洲大陆之间隔着广袤的陆地和水域,数据包要经过漫长的海底光缆,据统计,中国到西……

    2026年7月27日
    1400
  • r星库服务器连接不上是什么原因,连接失败怎么办

    r星服务器连接不上,绝大多数情况下是网络链路问题、平台服务状态异常或本地缓存故障,不是电脑配置或账号被封,你可以先尝试重启路由器、切换DNS,再检查R星服务器状态页面,这套操作能解决大部分临时性连接故障,为什么你的r星服务器连接不上r星服务器(Rockstar Games Service)承载着GTA5线上模式……

    2026年8月28日
    800
  • AI智能区块链发展前景如何?未来有哪些应用场景?

    AI智能区块链发展不仅是两项前沿技术的简单叠加,更是数字经济时代生产关系的根本性重构,核心结论在于:这种融合构建了一个去中心化、高效且可信的智能价值网络,通过区块链的不可篡改性解决AI的数据信任黑箱问题,同时利用AI的算法能力优化区块链的效率与扩展性,从而为Web3.0时代的产业落地提供坚实的技术底座,技术融合……

    2026年2月25日
    13200
  • 数据库单独服务器如何减轻前端压力?,如何减轻前端压力?

    将数据库迁移到独立服务器,能有效缓解前端应用服务器的资源竞争,提升整体响应速度,是架构优化中最直接且高性价比的实践,核心原理:为何数据库单独部署能直接减轻前端压力多数中大型业务在初期采用“ALL IN ONE”架构,即Web服务、数据库、静态资源全部运行在同一台服务器上,随着并发量上升,CPU、内存、磁盘IO三……

    2026年7月25日
    600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注