使用PHP与XMLHttpRequest开发API时线上环境无法获取数据问题
线上API请求失败的常见原因及解决方案
- 跨域(CORS)限制触发
本地测试时前端页面和接口通常同属localhost域名,不会触发跨域拦截。部署到线上后前端域名与接口域名nimatahernejad.ir不一致,浏览器默认拦截跨域AJAX请求。
解决方法:在接口PHP文件顶部添加CORS响应头:
// 允许所有域名跨域访问,生产环境建议替换为你的前端域名 header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
- 服务端接口自身异常
先直接在浏览器访问接口地址https://nimatahernejad.ir/tethergraph/api/last_liquidity.php,确认返回是否正常:- 如果返回404:检查接口文件的路径、大小写、文件权限是否正确,确保web服务运行用户有文件读取权限
- 如果返回500:检查服务器PHP环境是否开启json扩展,代码是否存在语法错误
- 混合内容拦截
如果你的线上前端页面是HTTP协议,而接口是HTTPS协议,主流浏览器会默认拦截这种「HTTP页面请求HTTPS资源」的混合内容,将前端页面也升级为HTTPS协议即可解决。 - 防火墙/WAF拦截
如果接口服务器配置了防火墙、WAF或者CDN防护规则,可能会将你的线上前端服务器的请求判定为恶意请求拦截,可查看防护日志确认是否有相关拦截记录,将前端服务器IP加入白名单即可。 - 请求逻辑缺失异常处理
建议给XHR添加onerror事件捕获具体错误信息,方便定位问题:
xhttp.onerror = function() { console.log('请求错误: ', this.status, this.statusText); }
内容的提问来源于stack exchange,提问作者ryuzaki L
相关产品推荐
相关产品推荐

