【发布时间】:2014-01-24 21:34:30
【问题描述】:
我正在使用 sencha touch 2.1.x 开发一个 sencha web 应用程序 此应用需要在 web 服务器和 iOS 应用上运行,并与 phonegap 3.1 打包在一起。
Web 服务器版本运行良好,但在执行 Ajax POST 请求时,我在 iOS 版本中遇到了一些问题。这是一个示例代码:
var jsonParams =
{
"username": loginParams.user,
"password": loginParams.pwd,
"serverVersion": serverVersion
};
var jsonStr = JSON.stringify(jsonParams);
console.log(jsonStr);
Ext.Ajax.request({
url: internalRoute.LOGIN,
headers: {'Content-Type':'application/json'},
method: 'POST',
scope:this,
params: jsonStr,
success: function(response){
.....
},
failure: function(response) {
.....
},
});
有时此请求在使用 phonegap 打包的 iOS 版本中可以正常工作,但随机失败,因为 post 有效负载为空。 console.log(jsonStr) 打印正确的数据,但服务器没有收到数据。我还使用了 HTTP 嗅探器来捕获发送的包,它不包含 POST 有效负载。
将代码更改为用户 jQuery $.ajax而不是 Ext.Ajax.request,问题仍然存在。
知道什么是错误的吗?
谢谢
【问题讨论】:
-
你的 jsonParams 总是一样的吗?对我来说,这似乎是逻辑上的失败点。
-
jsonParams 填充了用户输入的登录数据。
console.log(jsonStr)总是显示 jsonParams 数据是正确的。 -
由于这在混合应用程序中失败,您是否有可能在嗅探 CORS 飞行前请求?那不会有实际的有效载荷。只要 pre-flight 没有遇到错误,就会在 pre-flight 之后立即发出 POST 请求。
-
不,事实并非如此。我正在嗅探有时包含用于登录的 json 数据的 POST 请求,但有时它什么都不包含,内容长度 = 0 尽管 console.log 总是在 jsonStr var 中打印正确的数据。
-
添加了
beforeSend回调的实现来检查请求数据,它是正确的,但是服务器没有收到任何东西。服务器通过代理访问。会不会是代理问题?
标签: ios ajax cordova sencha-touch