【问题标题】:Ajax POST requests loosing payload in sencha app + phonegapAjax POST 请求在 sencha 应用程序 + phonegap 中丢失有效负载
【发布时间】: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


【解决方案1】:

看起来这实际上是一个代理问题,与 sencha 或 phonegap 无关。 如果我停用代理,我不会获得其他外部资源,但这个问题永远不会发生。 将搜索如何解决代理问题。 谢谢

【讨论】:

    猜你喜欢
    • 2013-09-23
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 2018-04-23
    • 2015-09-04
    • 2013-01-09
    相关资源
    最近更新 更多