原生 AJAX 的结果
尚未查询
点上面的「用原生 AJAX 查询」按钮
同一个查询,两种前端请求写法: 原生 AJAX(XMLHttpRequest) 与 fetch, 分别打两个不同的接口域名。
…,接口在
… / …,
属于 跨域(CORS)。两个接口都以
POST + JSON 方式调用,浏览器会先发一个
OPTIONS 预检,确认源站允许之后才发出真正的查询请求。
两个按钮打的是不同的接口,返回的也是不同的班次数据 —— 点完之后对比左右两块面板,就能看出结果分别来自谁。
尚未查询
点上面的「用原生 AJAX 查询」按钮
尚未查询
点上面的「用 fetch 查询」按钮
new → open → 回调 → send,
请求头还要单独 setRequestHeader)与 fetch 的
await fetch(url, init) → 检查 res.ok → await res.json()
——方法、头、请求体在 fetch 里收在一个 init 对象里,一次给全。
两者耗时几乎相同,差别在代码组织方式与错误处理。onload,
必须自己判 xhr.status;fetch 里同样必须自己判 res.ok。Access-Control-Allow-Origin。又因为请求是
POST 且带 Content-Type: application/json
(不在 CORS 安全清单里),浏览器会先发 OPTIONS 预检,
源站必须回 Allow-Methods: POST 与
Allow-Headers: Content-Type,否则真正的请求根本不会发出。
打开开发者工具的网络面板,每次点击都能看到 OPTIONS + POST 两条记录。Cache-Control: no-store,
保证每次点按钮都真实回源,便于观察链路。conf/lua/mock_dispatch.lua),
未配置的航线走 default.json 兜底。
日期只用于页面展示,不影响返回结果。试试点「广州 → 成都」或「深圳 → 杭州」,能看到 mock 里另外两套班次; 用别的城市组合则会命中 default 兜底(面板上会标出来)。