快递单号无反应主因是file://协议触发cors拦截,应改用live server等http服务;调用需用https、传key和正确com编码(如zto非yd),单号勿随意大小写转换。

快递单号输入后没反应?检查 fetch 请求是否被跨域拦截
浏览器直接打开本地 index.html 文件时,用 fetch 调用快递 100、聚合数据等公开 API,大概率会报 CORS error。这不是你代码写错了,而是浏览器阻止了本地文件协议(file://)发起的跨域请求。
实操建议:
- 用轻量 HTTP 服务启动页面,比如 VS Code 安装
Live Server插件右键“Open with Live Server”,地址变成http://127.0.0.1:5500/就能正常发请求 - 别在
fetch的url中硬编码http://开头的第三方接口——很多免费接口已强制要求https://,否则返回空或 400 - 快递 100 的免费接口需先注册获取
key,调用时必须带key=xxx和com=xxx(如com=yd表示圆通),漏掉任一参数都返回{"result":false,"message":"参数错误"}
查不到物流信息?确认快递公司编码和单号格式是否匹配
不同接口对快递公司编码(com)要求严格:快递 100 用 yto(百世/韵达合并后已弃用)、sto(申通)、sf(顺丰);而部分老教程写的 yd(圆通)在新接口中已不生效,得换 zto。
实操建议:
- 单号本身含字母时(如顺丰
SF123456789CN),不要用.toUpperCase()或.toLowerCase()随意转换,某些接口对大小写敏感 - 用户粘贴单号后,用正则
/^[a-zA-Z0-9]{10,20}$/粗筛——太短( - 别依赖前端自动识别快递公司:用户输“888888888888”可能既是中通也是韵达单号,应提供下拉选择或调用接口的
getComByNo(快递 100 支持)先查归属
页面卡死或反复查询?避免重复提交和未处理加载状态
用户连点两次“查询”,fetch 就发两次,若第一次还没返回,第二次结果可能覆盖第一次,导致时间线错乱,甚至 UI 停滞(尤其没加 loading 状态时)。
实操建议:
- 点击查询按钮后立即设
button.disabled = true,并改文字为"查询中...";请求结束(无论成功失败)再恢复 - 用
AbortController控制请求生命周期:再次点击时调用controller.abort()终止前一个请求,避免资源堆积 - 别把物流节点数组直接
.forEach()拼 HTML 字符串插入innerHTML——节点多时重排重绘卡顿,改用document.createElement批量建节点再append
移动端点不动、时间显示乱码?注意表单交互与日期解析
iOS Safari 对 <input type="text"> 软键盘唤起慢,且默认不触发 change 事件;物流时间字段如 "2024-03-15 14:22:05" 直接传给 new Date() 在部分安卓机上会解析成 Invalid Date。
实操建议:
- 把输入框
type改成"search",iOS 下更易唤起搜索键盘,并监听search事件替代change - 时间字符串统一用正则提取年月日时分秒:
str.match(/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/),再用new Date(...nums)构造,避开浏览器差异 - 物流节点容器加
style="overflow-y: auto; -webkit-overflow-scrolling: touch;",否则 iOS 滚动卡顿
真正麻烦的不是调哪个 API,而是每个环节都有隐性约束:跨域策略、编码映射、输入容错、中断控制、时间解析、滚动性能……少处理一处,用户就卡在某一步不动。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











