我在“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”输入的电子邮件。 提前谢谢!
答案 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
函数之外)。