我正在尝试编写一个脚本,按下按钮后,它将显示SoundCloud中歌曲的持续时间。我也对API有点麻烦。我已阅读并重新阅读关于某些“回调”传递参数的行,但我仍然不明白。 “因此,每个getter方法都接受一个回调函数作为参数,当被调用时,它将被赋予getter方法的返回值。”
这是我的代码所在。我知道它不漂亮,但我只是想让这件事变得有效。
<!doctype html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="http://w.soundcloud.com/player/api.js"></script>
<script>
$(document).ready(function() {
var widget = SC.Widget(document.getElementById('playing'));
widget.bind(SC.Widget.Events.READY, function() {
console.log('Ready...');
});
$('button').click(function() {
widget.getDuration(function(sound));
});
});
function sound(var time) {
document.write(time);
}
</script>
</head>
<body>
<iframe id="playing"
width="500"
height="400" scrolling="no"
frameborder="yes"
src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/66816173&auto_play=false&hide_related=false&visual=true">
</iframe>
<button>Play / Pause</button>
</body>
</html>
答案 0 :(得分:1)
您的代码中有两个错误的函数定义。 在developer.mozilla.org上,您可以找到一些非常好的javascript文档。 特别是,在此页面上,您可以了解如何正确定义函数: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions
返回您的代码:
1)getDuration
soundcloud函数接受回调。 function(sound)
不是有效的函数定义。
2)函数定义在参数名称
之前不需要var
关键字
以下是您的代码,其中包含两项更正。它可以像你期望的那样工作。
var widget = SC.Widget(document.getElementById('playing'));
widget.bind(SC.Widget.Events.READY, function() {
console.log('Ready...');
});
$('button').click(function() {
widget.getDuration(function(duration){
alert(duration);
});
});
});
在这里你可以看到工作小提琴:http://jsfiddle.net/Ldc2N/
还有一件事:我看到在应该是回调的内容中,你打电话给document.write
。
function sound(time) { document.write(time); }
请注意,它仅在文档未准备好时才附加内容。文档准备就绪时调用int会完全覆盖其内容。