在其他函数javascript中获取变量的值

时间:2015-07-11 08:25:40

标签: javascript php youtube-api youtube-javascript-api

我在“onPlayerReady”中有一个变量“mail”,其中我有电子邮件地址,我想在“onPlayerStateChange”中调用此变量,以便我可以将值传递给'input.php'页面以将其保存到数据库中。

$(function(){
  var youtubePlayer;
  var myWindow = window;
  var vid_id='ha48nSKLLh8';
  onYouTubeIframeAPIReady = function(){
   youtubePlayer = new YT.Player('youtube', {
     height: '390',
     width: '640',
     videoId: vid_id,
     events: {
       'onReady': onPlayerReady,
       'onStateChange': onPlayerStateChange
     }
   });
   }

  onPlayerReady = function(event) {
   event.target.pauseVideo();
   var mail=prompt('email:'); //this is the variable mail i am talking about i want the value if this variable inside onPlayerStateChange


   };


  onPlayerStateChange = function(event) {

   if (event.data == 1) {
       var tm = youtubePlayer.getCurrentTime();
       var st = youtubePlayer.getPlayerState();
       //$("#status1").text(tm);    


       $("#status1").text(st);
       $.ajax({
        type: 'POST',
        url: 'input.php',
        data:{ tm: tm, vid_id: vid_id,mail:mail},   
        success:function(html){
           alert(done);

        }
    });

       //$("#status1").text(tm);

     $("#status").text("Playing!");
     myWindow.focus();
     myWindow.onblur = function() {
       $("#status").text("You went away!");
       youtubePlayer.stopVideo();
     };
   }

  };

  youtubeplayer.bind('play',function(){
      youtubeplayer.time(60);
      return this.unbind;
  });
})

请帮我这个或建议我,如果有任何其他方法来保存在“onPlayerReady”输入的电子邮件。 提前谢谢!

2 个答案:

答案 0 :(得分:1)

我建议在你的闭包内声明mail变量,如果不是必要的话,不要声明为全局变量,即:

$(function(){
    var mail = null; // not a global, but available in the entire function scope.
    var youtubePlayer;
    var myWindow = window;
    ...

细微差别在于,现在没有其他代码可以覆盖mail变量(反之亦然),因此没有命名冲突。 最好的做法是在javascript中尽可能避免使用全局变量。

只确保不在mail中重新定义onPlayerReady()变量:

onPlayerReady = function(event) {
   event.target.pauseVideo();
   mail = prompt('email:'); // Only store the prompt input (i.e no var).
};

通过这种方式,您仍然可以访问ajax请求中的mail变量而不会出现上述缺点。

另外,请参阅此post

答案 1 :(得分:0)

如果您在mail之外声明$(function()变量,它将是global variable,并且可以通过您的所有Javascript代码访问。 E.g。

var mail = "";
$(function(){
    ...

    onPlayerReady = function(event) {
        event.target.pauseVideo();
        mail=prompt('email:'); // remove the var here
    };

事实上,正如@nikhil指出的那样,你甚至可以将它放在外部function()内(只要它在onPlayerReady函数之外)。