【问题标题】:How to call function from another js file; how to pass session variables to another js file如何从另一个js文件调用函数;如何将会话变量传递给另一个js文件
【发布时间】:2014-06-10 15:10:39
【问题描述】:

我是 Javascript 的初学者,正在学习如何创建网站。我正在尝试将 google+ 登录功能添加到我的网络应用程序中,但无法通过 javascript 传递会话信息。我有 2 个 js 文件 - login.js 和 profile.js。当用户登录时,login.js 将运行,并从 profile.js 加载一个函数。我在 index.html 文件中包含了这两个脚本,但仍然出现此错误:loadProfile is not defined。被困了好几天,非常感谢一些指导!

这是我的代码

index.html

  {head}
    {script src="https://apis.google.com/js/plusone.js"}{/script}
    {script src="https://apis.google.com/js/client:plusone.js"}{/script}
  {/head}
  {body}
  {script type="text/javascript" src="Scripts/profile.js"}{/script}
  {script type="text/javascript" src="Scripts/login.js"}{/script}
  {input type="button" id="login" value="Login" onclick="login()" /}
  {input type="button" id="logout" class="hide" value="Logout" onclick="logout()" /}
  {script type="text/javascript" src="Scripts/logout.js"}{/script}
  {/body}

login.js

function login() {
   var myParams = {
'clientid' : '699XXXXXXX.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.profile.emails.read'
 };
gapi.auth.signIn(myParams);
}

function loginCallback(result) {
  if(result['status']['signed_in']) {
  alert("Login Success");
  var obj = gapi.auth.getToken();
  loadProfile();                // Calls loadProfile() from profile.js
  }
 }

profile.js

function loadProfile(){  
var request = gapi.client.plus.people.get( {'userId' : 'me'} );
request.execute(loadProfileCallback());
  }  
function loadProfileCallback(obj) {
profile = obj;
email = obj['emails'].filter(function(v) {
    return v.type === 'account';
})[0].value; 
displayProfile(profile);
  }
>>> subsequently it's just some callback functions

【问题讨论】:

    标签: javascript google-api google-plus


    【解决方案1】:

    你可以简单地在你的文件声明之前在你的 HTML 中编写一些内联 Javascript,如下所示:

    <script>
        function loadProfile(){  
            var request = gapi.client.plus.people.get( {'userId' : 'me'} );
            request.execute(loadProfileCallback());
        } 
    </script>
    <script type="text/javascript" src="Scripts/profile.js"></script>
    <script type="text/javascript" src="Scripts/login2.js"></script>
    

    这样,这个函数在全局范围内可供所有后续文件使用。请参阅此答案:Can we call the function written in one JavaScript in another JS file?,该答案与您遇到的问题相同,并且对文件的范围及其用法有很好的解释。

    【讨论】:

    • 我尝试将函数放入 index.html 但它引发了另一个问题:错误:gapi.client.plus 未定义。看来我必须先完成我的 login.js 才能调用 loadProfile(),所以我不能将它与 index.html 内联。
    • gapi 变量在哪里定义?由于您没有链接它,我看不到变量的声明位置,您是否正确引用了 google api 脚本?
    • gapi 是 Google+ API,我已将其包含在 index.html 标头中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2018-07-23
    • 2020-12-25
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多