Phonegap + Sencha + Android:具有基本访问身份验证的ajax请求失败

时间:2011-11-09 16:56:21

标签: javascript http authentication cordova extjs

我大家,

我正在研究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])

谢谢你们,你们都摇滚!

5 个答案:

答案 0 :(得分:3)

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

查看此链接以获取更多信息

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

答案 1 :(得分: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');                    
            }    
    });

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

答案 2 :(得分:1)

我有同样的问题......你能解决它吗?

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

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]);
    } 
});

答案 3 :(得分:0)

使用console.log来查看js对象的内容,你总是必须在浏览器中尝试使用像Firebug这样的debbuger来更轻松地检测问题。

要解决Android问题,请确保此行位于phonegap应用清单文件中:  < uses-permission android:name =“android.permission.INTERNET”>< /使用说明 - 许可>

祝你好运!

答案 4 :(得分:0)

这是跨域请求问题。您必须修改代码才能创建JSONP请求

Ext.util.JSONP.request({
        url: 'http://url',
        callbackKey: 'callback',
        callbackName: 'callback',
        model: 'Model',

        params: {},

        callback: function(result){
            var shows = result.data;                        
        },                  
    });

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