ajax 请求需用浏览器或 node.js 原生 api(如 fetch)实现;fetch 是现代首选,get 须用 urlsearchparams 编码参数,post 提交 json 需设 content-type 并 stringify;跨域问题多因服务端 cors 配置缺失,fetch 不支持 ie 需 polyfill。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

Ajax 请求不用千问 AI 写,它不参与实际 HTTP 请求过程;你得用浏览器或 Node.js 环境里的原生 API 或库来发。
用 fetch 发 GET 请求最直接
现代前端开发中,fetch 是默认首选。它比 XMLHttpRequest 更简洁,且返回 Promise,方便配合 async/await。
- GET 请求不带 body,参数拼在 URL 后,注意用
URLSearchParams编码,别手拼字符串(否则中文、空格会出错) - 必须手动检查
response.ok,fetch只在网络失败时 reject,404、500 仍算 “成功” 返回 Response 对象 - 响应体要显式调用
response.json()或response.text(),不能直接当 JS 对象用
const url = new URL('/api/user', 'https://example.com');
url.searchParams.set('id', '123');
fetch(url)
.then(res => {
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
})
.then(data => console.log(data))
.catch(err => console.error(err));
fetch POST 提交 JSON 数据要注意 headers
后端通常靠 Content-Type: application/json 判断是否解析 JSON body,漏设这个 header 是最常见 400 错误原因。
-
body必须是字符串,记得用JSON.stringify(),不能直接传对象 - 如果后端用的是表单接收(如
req.bodyin Express),那该用application/x-www-form-urlencoded+URLSearchParams,不是 JSON - 某些代理或 CORS 预检(OPTIONS)失败,往往是因为后端没正确响应预检请求,和前端代码无关
fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username: 'a', password: 'b' })
});
跨域请求被拒?先看浏览器控制台报的到底是哪条错误
看到 “CORS policy” 报错,别急着改前端——90% 的问题出在服务端没配好响应头。
-
No 'Access-Control-Allow-Origin' header:后端响应里缺Access-Control-Allow-Origin -
Response to preflight request doesn't pass access control check:预检通过了但实际响应头不匹配,比如允许了 GET 却没允许 POST,或漏了Access-Control-Allow-Headers - 本地开发时用
localhost:3000访问localhost:8000就算跨域,协议、域名、端口任一不同都算
需要兼容老浏览器?小心 fetch 没有 polyfill
IE 完全不支持 fetch,Safari 10.1 以下也不支持。真要保 IE,只能换回 XMLHttpRequest,或者加 whatwg-fetch polyfill。
- polyfill 不解决 CORS,只补语法;它也不能让 IE 支持
AbortController - 用打包工具(如 Webpack)时,确保 polyfill 在业务代码前执行,否则可能来不及劫持全局
fetch - Node.js 环境没有
fetch(除非用node-fetch或undici),别把浏览器代码直接搬过去跑
真实项目里,Ajax 的难点从来不在“怎么写一行请求”,而在错误路径覆盖、加载状态管理、取消重复请求、token 自动注入这些细节——它们不会报错,但会让用户卡在白屏或旧数据上。










