【问题标题】:Phonegap on Android: AJAX request fails when setting Accept: 'application/xml' on request headerAndroid上的Phonegap:设置Accept时AJAX请求失败:请求标头上的'application / xml'
【发布时间】:2012-03-08 23:20:37
【问题描述】:

我正在向 Assembla REST API 发出 GET 请求。你可以在这里阅读:http://www.assembla.com/spaces/breakoutdocs/wiki/Assembla_REST_API

API 要求您在请求标头上设置 Accept: 'application/xml' 以接收回 xml 数据。否则,html 会在响应中返回。

我的服务调用在 iOS 和 Safari 中有效,但在 Android 中不返回任何内容。

我的cordova.xml 文件有<access origin=".*"/>,所以我认为这不是白名单问题。我在这里尝试了几乎所有我能想到的变化。

示例 ajax 请求:

$.ajax({
    url: 'https://www.assembla.com/spaces/my_spaces',
    username: userModel.get('username'),
    password: userModel.get('password'),
    headers: { 
        Accept: 'application/xml'
    },
    success: onSuccess,
    error: onError
});

就像我说的,这个请求在 Android 中不会触发 onSuccess 或 onError。该请求在 iOS 和 Safari 中运行良好。如果我取出 headers 属性,请求将在 Android 中点击 onSuccess 但将返回 html。

【问题讨论】:

    标签: android ajax cordova


    【解决方案1】:

    您是否检查过 firebug 或 httpheaders 中的请求和响应以查看它们是否正确?基本上看你的请求头是否正确设置。仔细检查您没有收到任何服务器错误,并查看返回的响应是否实际上是 xml。

    【讨论】:

    • 因此,即使设置了用户名和密码,授权标头似乎也已从 Android 请求中排除。
    【解决方案2】:

    仅在 ajax 请求上设置用户名和密码属性,授权在 Android 上失败。手动设置标题解决了这个问题。

    headers: { 
        Accept: 'application/xml',
        Authorization: 'Basic ' + window.btoa('username:password')
    }
    

    【讨论】:

      【解决方案3】:

      我在这里也有类似的问题:Soap query with jQuery / Phonegap always fail on Android 而我不需要指定任何授权参数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-22
        • 2016-03-03
        • 2017-10-30
        • 2013-10-14
        • 1970-01-01
        • 2016-01-02
        • 2013-09-01
        • 1970-01-01
        相关资源
        最近更新 更多