【问题标题】:Phonegap + Sencha + Android : ajax request with a basic access authentication failledPhonegap + Sencha + Android:带有基本访问身份验证的ajax请求失败
【发布时间】:2011-11-09 16:56:21
【问题描述】:

各位,

我正在开发一个 Phonegap 应用程序和 Sencha 框架。

我尝试联系protected server,但 Android 的身份验证失败(但 iOS 没有)。我使用下面的代码:

    Ext.Ajax.request({
        url:"http://user:password@api.website.fr/query.json",
        method: 'GET',
        // I tried to send the header directly but it didn't work too
        headers: {
            "Authorization": "Basic s2dh3qs76jd2hqjsdh=="  
        },        
        success: function (result, request) {                 
            alert(result);
        },
        failure: function ( result, request) {            
            for(var key in result)
                alert(result[key]);
        } 
    });

错误消息说我需要 HTTP 摘要...

只知道:

  • 互联网连接正常
  • 相同的代码适用于本地文件和其他外部 API
  • 我不知道如何在 LogCat 中探索 Javascript 对象,所以请原谅我的恶心alert(result[key])

谢谢你们,你们都摇滚!

【问题讨论】:

  • 我也遇到了同样的问题,你解决了吗?
  • 不,我没有找到解决方案。对不起。
  • 有什么解决办法吗?如何使用 Eclipse 禁用 Android 应用程序的网络安全?

标签: javascript http authentication cordova extjs


【解决方案1】:

我同意@Mariano。为什么不能在浏览器中尝试,然后使用phonegap 部署为应用程序。跨域问题可以通过这个命令从终端启动google chrome解决 google-chrome --args --disable-web-security

查看此链接了解更多信息

http://www.senchatouchbits.com/7/cross-domain-ajax-requests.html

【讨论】:

  • 我不知道禁用 Web 安全的这个技巧。谢谢!
  • 如果你是 Mac 用户,那就是:打开 /Applications/Google\ Chrome.app --args --disable-web-security
【解决方案2】:

我在验证我的 ajax 请求时遇到了无穷无尽的麻烦,但我终于让它工作了。我得到了网络的基本 base64_encode 算法。然后你需要做的就是如下调整你的标题

  Ext.Ajax.request({
            url:'yourwebserviceurl',
            method:'GET',
            headers: {
                Authorization: 'Basic '+ base64_encode(form.username+':'+form.password)
            },    
            success: function(response){
                 //Ext.Msg.alert(response.responseXML);
                 console.log(response.responseText); 
            },
            failure: function(response){
                //console.log('Success response: ' + response.responseText); 
                Ext.Msg.alert('b');                    
            }    
    });

这适用于基本的肥皂服务!

【讨论】:

    【解决方案3】:

    我也有同样的问题...你能在哪里解决它?

    顺便说一句...您必须像这样设置用户和密码:

    Ext.Ajax.request({
        url:"http://api.website.fr/query.json",
        method: 'GET',
        username : 'user',
        password : 'password',
        // I tried to send the header directly but it didn't work too
        headers: {
            "Authorization": "Basic s2dh3qs76jd2hqjsdh=="  
        },        
        success: function (result, request) {                 
            alert(result);
        },
        failure: function ( result, request) {            
            for(var key in result)
                alert(result[key]);
        } 
    });
    

    【讨论】:

      【解决方案4】:

      使用 console.log 来查看 js 对象有什么,你总是必须在浏览器中使用像 Firebug 这样的调试器来尝试应用程序,以便更容易地检测问题。

      对于您在 Android 中的问题,请确保此行位于 phonegap 应用清单文件中: 权限 >

      祝你好运!

      【讨论】:

      • 谢谢@Mariano。我不能对该脚本使用 Web 浏览器(和 console.log),因为不允许跨域查询。我的清单文件没问题...
      【解决方案5】:

      这是一个跨域请求问题。您必须修改代码以创建 JSONP 请求

      Ext.util.JSONP.request({
              url: 'http://url',
              callbackKey: 'callback',
              callbackName: 'callback',
              model: 'Model',
      
              params: {},
      
              callback: function(result){
                  var shows = result.data;                        
              },                  
          });
      

      请记住,您还必须调整服务器端,以便它的响应是 jsonp 结果(回调)

      【讨论】:

      • Phonegap 允许跨域请求。问题来自失败的 HTTP 身份验证...我已经尝试将 JSONP 与“user:password@api.webiste.com”之类的 URL 一起使用,它适用于 iPhone 和 Web 浏览器,但不适用于 Android :( 谢谢帮助我。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多