2016-08-02 114 views
4

我试图使用requireJS与谷歌,加上API,但得到当我点击登录按钮谷歌加API错误gapi.loaded_0

这里的错误是错误和截图:

GET https://apis.google.com/_/scs/apps-static/_/js/k=oz.gapi.en.f5Li87Zolqg.O/m…sv=1/d=1/ed=1/am=AQ/RS=AGLTcCPR6xH_GlLdKZ8KMxaWNPWQokoYsg/cb=gapi.loaded_0

截图:https://i.imgsafe.org/098c5b5634.png

,我使用此代码:
gapi is not defined error comes when using with requirejs

注意:我在调用一个JavaScript文件中的gp.js并在其中定义它,这里是第一行。

我screen.js文件

define(["facebook","fb","googleplus","gp"], function(facebook,fb,gapi,gp){ 
// some bunch other code will go here 

      $('#login').click(login); 

      // some other code will go here 

}); 

gp.js是包含以下代码

//$('#login').click(login); 
    //$('#logout').click(logout); 
function logout(){ 
    gapi.auth.signOut(); 
    location.reload(); 
} 
function login() { 
    var myParams = { 
     'clientid' : '455646565646-ppqmgsfghfdhgfghqguj3i4ir70i.apps.googleusercontent.com', 
     'cookiepolicy' : 'single_host_origin', 
     'callback' : 'loginCallback', 
     'approvalprompt':'force', 
     'scope' : 'https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile' 
    }; 
    gapi.auth.signIn(myParams); 
} 

    window.loginCallback = function (result) { 
     if (result['status']['signed_in']) { 
      gapi.client.load('plus', 'v1', function() { 
       var request = gapi.client.plus.people.get(
        { 
         'userId': 'me' 
        }); 
       request.execute(function (resp) { 
        var email = ''; 
        if (resp['emails']) { 
         for (i = 0; i < resp['emails'].length; i++) { 
          if (resp['emails'][i]['type'] == 'account') { 
           email = resp['emails'][i]['value']; 
          } 
         } 
        } 


        var str = "Name:" + resp['displayName'] + "<br>"; 
        str += "Email:" + email + "<br>"; 
        str += "DOB:" + resp['birthday'] + "<br>"; 
        str += "Gender:" + resp['gender'] + "<br>"; 
        document.getElementById("profile").innerHTML = str; 
       }); 
      }); 
     } 
    } 

    onLoadCallback = function(){ 
    gapi.client.setApiKey('Sgtfjhygjhgjhg9U1nKaZ5H1MmwTuthspQPNqY'); 
    gapi.client.load('plus', 'v1',function(){}); 
} 

而我main.js放在这里

require.config({ 
    shim: { 

     'gp' : { 
      deps: ['jquery','googleplus'], 


     }, 
     'googleplus' : { 
      deps: ['jquery'], 
      exports: 'gapi' 
     }, 


    }, 
    paths: { 
     'googleplus': 'https://apis.google.com/js/client.js?onload=onLoadCallback' 

    }, 

}) 
require(['gp']); 

为什么会发生这种情况,我该如何解决?

+0

你有没有想过这个? – CamHart

回答

0

gs.js必须是一个模块,如果你想使用一个模块内定义的函数,该模块必须返回该功能:

define(['jquery', 'googleplus'], function($, gapi) { 
    function logout(){ 
     gapi.auth.signOut(); 
     location.reload(); 
    } 
    function login() { 
     var myParams = { 
      'clientid' : '455646565646-ppqmgsfghfdhgfghqguj3i4ir70i.apps.googleusercontent.com', 
      'cookiepolicy' : 'single_host_origin', 
      'scope' : 'https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile' 
     }; 
     gapi.load('client:auth2', function() { 
      gapi.auth2.init(myParams).then(function() { 
       gapi.auth2.getAuthInstance().signIn().then(loginCallback); 
      }); 
     }); 
    } 

    var loginCallback = function() { 
     gapi.client.load('plus', 'v1', function() { 
      var request = gapi.client.plus.people.get(
       { 
        'userId': 'me' 
       }); 
      request.execute(function (resp) { 
       var email = ''; 
       if (resp['emails']) { 
        for (i = 0; i < resp['emails'].length; i++) { 
         if (resp['emails'][i]['type'] == 'account') { 
          email = resp['emails'][i]['value']; 
         } 
        } 
       } 


       var str = "Name:" + resp['displayName'] + "<br>"; 
       str += "Email:" + email + "<br>"; 
       str += "DOB:" + resp['birthday'] + "<br>"; 
       str += "Gender:" + resp['gender'] + "<br>"; 
       document.getElementById("profile").innerHTML = str; 
      }); 
     }); 

    } 

    gapi.client.setApiKey('Sgtfjhygjhgjhg9U1nKaZ5H1MmwTuthspQPNqY'); 

    return { 
     login: login, 
     logout: logout 
    }; 
}); 

现在你可以使用功能loginlogout其他模块:

define(["jquery", "gp"], function($, gp){ 
    $('#login').click(gp.login); 
}); 

编辑:

我试图重写login功能基于https://developers.google.com/identity/sign-in/web/reference#gapiauth2initwzxhzdk19paramswzxhzdk20

+0

但我的问题与GET的空载https://apis.google.com//scs/apps-static//js/k=oz.gapi.en.f5Li87Zolqg.O/m...sv=1/d = 1/ed = 1/am = AQ/rs = AGLTcCPR6xH_GlLdKZ8KMxaWNPWQokoYsg/cb = gapi.loaded_0在这里我得到404在网络和 – Aryan

+0

当我正在尝试你的代码我得到这个错误无法读取属性'setApiKey'undefined – Aryan