Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用google API从中获取联系人_Javascript_Api_Google Api_Google Api Java Client_Google Contacts Api - Fatal编程技术网

Javascript 无法使用google API从中获取联系人

Javascript 无法使用google API从中获取联系人,javascript,api,google-api,google-api-java-client,google-contacts-api,Javascript,Api,Google Api,Google Api Java Client,Google Contacts Api,我正在使用谷歌联系人API v3来提取谷歌联系人 我从GoogleAPI客户端库开始,该库用于JavaScript的身份验证和授权。我对API访问的这一部分没有问题 但是在完成auth部分后,我必须获取googlecontacts(只读访问对我来说很好)。我正在为Google Contacts API v3使用gdata javascript客户端。 我还引用了谷歌官方文档,并复制了代码,并进行了必要的修改,以适应我的工作 我的问题是 它不起作用。它没有进入已注册的回拨功能 我也尝试过使用只读模

我正在使用谷歌联系人API v3来提取谷歌联系人

我从GoogleAPI客户端库开始,该库用于JavaScript的身份验证和授权。我对API访问的这一部分没有问题

但是在完成auth部分后,我必须获取googlecontacts(只读访问对我来说很好)。我正在为Google Contacts API v3使用gdata javascript客户端。 我还引用了谷歌官方文档,并复制了代码,并进行了必要的修改,以适应我的工作

我的问题是

  • 它不起作用。它没有进入已注册的回拨功能
  • 我也尝试过使用只读模式。但这也不起作用
  • 我遵循两段代码,一段用于可编辑模式,另一段用于只读模式

    可编辑模式访问:

    function handleAuthResult(authResult){
        if (authResult && !authResult.error) {
            fetch_contacts_data(authResult);
        };
    }
    
    function auth() {
        var config = {
            'client_id': 'CLIENT_ID',
            'scope': 'https://www.google.com/m8/feeds'
        };
        gapi.auth.authorize(config, handleAuthResult);
    }
    
    
    function fetch_contacts_data(token) {
        $.ajax({
            url: "https://www.google.com/m8/feeds/contacts/default/full?access_token=" + token.access_token  + "&max-results=70000&alt=json" + "&callback=?",
            dataType: "json",
            success:function(data) {
                contacts = [];
                for (var i = 0, entry; entry = data.feed.entry[i]; i++) {
                    var contact = {
                        'name' : entry['title']['$t'],
                        'id' : entry['id']['$t'],
                        'emails' : [],
                        'phoneNumber' : []
                    };
    
                    if (entry['gd$email']) {
                        var emails = entry['gd$email'];
                        for (var j = 0, email; email = emails[j]; j++) {
                            contact['emails'].push(email['address']);
                        }
                    }
                    if (entry['gd$phoneNumber']) {
                        var phoneNumber = entry['gd$phoneNumber'];
                        for (var j = 0, phone; phone = phoneNumber[j]; j++) {
                            contact['phoneNumber'].push(phone['$t']);
    
                        }
                    }
                    if (!contact['name']) {
                        contact['name'] = contact['emails'][0] || "<Unknown>";
                    }
                    contacts.push(contact);
                }
                numContacts = contacts.length;
                friend_list_json_str = '';
                for(var j=0;j<numContacts;j++) {
                    name = (contacts[j])['name'];
                    emails = (contacts[j])['emails'];
                    phone = (contacts[j])['phoneNumber'];
                    email_list= '';
                    phone_list= '';
                    for(var k=0;k<emails.length;k++) {
                        email_list += '"'+emails[k] + '",' ;
                    }
                    email_list = email_list.substring(0, email_list.length -1)
    
                    for(var k=0;k<phone.length;k++) {
                        phone_list = '"'+phone[k] + '",';
                    }
                    phone_list += phone_list.substring(0, phone_list.length -1)
    
                    friend_json_str = '';
                    friend_json_str += '{"name":"'+name + '",';
                    friend_json_str += '"emails":['+email_list+'],';
                    friend_json_str += '"phoneNumber":['+phone_list+']' ;
                    friend_json_str += '},';
                    friend_list_json_str += friend_json_str;
                }
                friend_list_json_str = friend_list_json_str.substring(0, friend_list_json_str.length - 1);
    
                var user_data = get_user_data();
                var len = user_data.length;
                user_data = user_data.substring(0, len - 2);
                user_data += friend_list_json_str + ']}';
                data = "invite_data="+ user_data;
                url = '/invite';
                var posting = $.post( url, data );
    
                posting.done(function( response_data ) {
                });
            }
        });
    }
    
    function auth() {
        var config = {
            'client_id': 'CLIENT_ID',
            'scope': 'https://www.googleapis.com/auth/contacts.readonly'
            };
        gapi.auth.authorize(config, handleAuthResult);
    }
    
    注意:代码的其余部分与上面相同

    在这两种情况下,ajax调用都失败了

     $.ajax({
                url: "https://www.google.com/m8/feeds/contacts/default/full?access_token=" + token.access_token  + "&max-results=70000&alt=json" + "&callback=?",
                dataType: "json",
                success:function(data)
    

    有人能告诉我为什么这个代码不起作用吗?

    你被浏览器的弹出窗口阻止程序阻止了

    单击按钮后尝试调用
    auth()
    方法,它应该可以工作

    要使此问题无效,您需要:

  • 首先,尝试使用参数
    {immediate:true}
    调用
    gapi.auth.authorize
    。如果用户已经授予了权限,它将尝试在后台获取令牌
  • 如果失败,则向用户显示一个按钮以进行身份验证。当用户单击它时,使用参数
    {immediate:false}
    调用
    gapi.auth.authorize

  • 请记住,您的客户id必须始终保持安全。我已经编辑了你的问题并为你删除了它。非常感谢DalmTo!从ajax请求中删除“+”&回调=?“`。我认为这会触发JSONP响应,而不是使用成功回调。客户端ID可以被认为是公共的,毕竟它们包含在客户端JS中。这是你必须保密的服务器密钥/机密。你的意思是说我必须以不同的方式处理它,而不是cb机制吗?你能建议我处理jSONP响应的方法吗?嗨,David,它对我不起作用。进一步调查后,我发现我得到了响应数据,但不知怎的,注册的回调没有被调用。。