Cordova 8.0中AJAX请求实现及安卓真机404问题排查求助
嘿,我之前在做Cordova项目时也踩过这个真机AJAX请求的坑,结合你已经做的配置,咱们一步步排查剩下的关键问题:
补全Content-Security-Policy(CSP)配置
你提到设置了CSP meta标签但没写完,这大概率是核心问题之一。CSP规则如果过于严格,会直接阻止AJAX请求的发送。测试阶段可以先用宽松的配置(上线后记得改成限定具体域名):<meta http-equiv="Content-Security-Policy" content="default-src * 'self' 'unsafe-inline' 'unsafe-eval' data: gap: content:;">这里的
data: gap: content:是Cordova运行必需的协议,不能漏掉;如果你的服务器是固定域名,也可以把*换成具体的服务器地址,比如default-src https://your-api-domain.com,这样更安全。别用localhost/127.0.0.1作为服务器地址
PC模拟器里的localhost指向的是电脑本身,但真机的localhost是它自己的本地环境,根本找不到你的开发服务器。你需要把请求URL改成电脑的局域网IP(比如192.168.1.100),或者服务器的公网域名/IP,确保真机和服务器在同一个网络(比如连同一个WiFi)。检查AndroidManifest.xml的网络权限
虽然Cordova默认会添加网络权限,但有时候配置可能被覆盖。打开platforms/android/app/src/main/AndroidManifest.xml,确保里面有这两行:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />这两个权限是AJAX请求能正常发送的基础。
解决Android 9+的明文HTTP限制
从Android 9(API级别28)开始,系统默认禁止明文HTTP请求,只允许HTTPS。如果你的服务器用的是HTTP,得做额外配置:- 在
platforms/android/app/src/main/res/xml目录下创建network_security_config.xml,内容如下:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> </network-security-config> - 打开
AndroidManifest.xml,在<application>标签里添加:android:networkSecurityConfig="@xml/network_security_config"
- 在
确认白名单插件已正确安装
你在config.xml里加了<access>等配置,但如果没安装cordova-plugin-whitelist插件,这些配置根本不会生效。运行下面的命令检查并安装:cordova plugin add cordova-plugin-whitelist安装完成后一定要重新构建项目:
cordova build android,不然配置不会同步到真机包。用真机调试抓包排查真实请求
有时候"NOT FOUND"可能是请求路径拼写错误,而不是服务器问题。你可以用Chrome的远程调试功能看真实请求:- 打开Chrome浏览器,输入
chrome://inspect/#devices - 把真机通过USB连接到电脑,确保手机开启了USB调试
- 在页面里找到你的Cordova应用,点击"inspect",切换到Network标签,就能看到AJAX请求的真实URL、状态码和响应内容,直接定位问题。
- 打开Chrome浏览器,输入
内容的提问来源于stack exchange,提问作者Chong Lip Phang

