我正在将一个 ajaxed、移动优化的网站移植到 PhoneGap,但未能成功地将任何 POST 发送到服务器。据我所知,xhreq POSTS 应该可以在 PhoneGap 中实现。
具体信息:我的目标 Android 平台使用最新的 Cordova 3.3.1-0.1.2、最新的 Android SDK 以及由 Verizon 更新到 Android 4.3 的 Galaxy S3。通过 wifi 连接到我的本地服务器。在每次尝试中,POST 都会以 GET 的形式到达服务器,没有发布数据(使用 tcpdump 检查数据包进行验证)。针对移动设备优化的网站在同一部手机上的浏览器中运行良好,也可以通过 WiFi 运行。
我通过创建一个全新的 Phonegap 项目来隔离失败案例,无非是:
$ cordova create Hello
$ cd Hello
$ cordova platform add android
然后在 index.js 中,在 onDeviceReady 处理程序的末尾,添加我首先在简单浏览器页面中测试的代码 fragment (此处替换为域):
// TEST POST CAPABILITY
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState==4 && (req.status==200 || req.status==0)) {
console.log("POST Response: " + req.responseText);
}
};
var t = new Date().getTime(); // Just to foil any caching
req.open("POST", "http://mydomain.com/services/rpc?t=" + t, true); // async
req.setRequestHeader('Content-type','application/text; charset=utf-8');
var postContent = JSON.stringify({id:t, method:"misc.log", params:[{log:"POST Test"}]});
req.send(postContent);
然后在手机上运行:
$ cordova run android
它像更完整的应用程序一样失败,以 GET 方式到达服务器,没有发布数据。我验证了几个配置项默认值,以确保它们符合要求:
在 config.xml 中:
<access origin="*" />
在 AndroidManifest.xml 中:
<uses-permission android:name="android.permission.INTERNET" />
对于可能出现的问题或其他需要调查的事情有什么想法吗?
谢谢。
最佳答案
您的内容类型应设置为
“application/json”
。
JSON.stringify() 创建 JSON 内容。
接下来,您能告诉我们您的服务器进程如何确定请求类型吗?能贴一下相关代码吗?
我将从调整内容类型值开始。看看这是否会产生影响。
希望有帮助。
关于javascript - PhoneGap 应用程序的 XMLHttpRequest POST 数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21192670/