【问题标题】:phonegap application ajax calls fail after upgrading android from 2.3.3 to 4.0.3将 android 从 2.3.3 升级到 4.0.3 后 phonegap 应用程序 ajax 调用失败
【发布时间】:2012-12-02 19:37:51
【问题描述】:

我开发了一个移动应用程序,使用:

  • jquery mobile 1.1
  • jquery 1.7.2
  • cordova/phonegap 2.0.0

此应用程序会触发对远程服务器的 AJAX 发布调用,例如:

$.ajax(
type: "post",
cache: false,
timeout: 30000,
url: "http://"+ username+":"+password +"@mycompany.com/mysite/and/so/on.asmx",
contentType: "text/xml",
// other params...

该应用程序在 Android 2.2 和 2.3.3 中运行良好。到目前为止一切顺利。

用户已升级到 Android 4.0.3,主页加载正常,但 ajax 调用不再起作用。 在android 4.1的模拟器中也是一样的。

考虑到除了平台没有其他变化,Webkit 层中的哪些变化可能会导致问题? 是否有已知的迁移规则需要遵循?

谢谢你

【问题讨论】:

  • 您是否尝试将PhoneGap 升级到最新版本(2.2.0)?
  • 您能否在 Android 4.0.3 模拟器中进行测试并尝试查看导致 ajax 失败的异常/错误?服务器端或设备和服务器之间的其他组件是否发生了任何变化?

标签: android ajax cordova jquery-mobile android-4.0-ice-cream-sandwich


【解决方案1】:

为了提高安全性,在较新版本的 android 中,很多东西都被锁定了。 url 中包含的密码是不安全的,尤其是如果您不使用 https,因此某些浏览器不再支持它们。

我没有看到任何特定于 android webview 的内容,但它在 google 的其他浏览器中肯定已被弃用。

http://code.google.com/p/chromium/issues/detail?id=123150

尝试在标头中设置凭据:

$.ajax({
        type: "GET",
        url: url,
        dataType: 'json',
        async: true,
        data: {},
        beforeSend: function(xhr) {
            xhr.setRequestHeader('Authorization', "Basic " + btoa(user + ':' + pass));
        },
        success: onSuccess,
        error: onError
    });

【讨论】:

  • 嗨,你的回答让我遇到了安全问题。
  • 嗨,Tom,那么您的回答让我遇到了安全问题。实际上我被你建议的方式卡住了,因为我的远程服务,即共享点服务,会拒绝我这种身份验证,然后我最终将凭据直接传递到 URL。无论如何处理android 4的这个问题我需要回头尝试解决这个问题(sharepoint拒绝这种身份验证)。
  • 更新:在 beforeSend 回调函数中传递凭据解决了这个问题!汤姆的暗示是对的。实际上它也适用于 Android 2.3.3 和 2.2。
【解决方案2】:

只需将<access origin="your server" subdomains="true" /> 放入config.xml 即可。无需重写所有 ajax 调用 ;-) 刚刚用我的应用程序完成了它,它在所有 android 版本上都可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多