Membership is FREE – with unlimited access to all features, tools, and discussions. Premium accounts get benefits like banner ads and newsletter exposure. ✅ Signature links are now free for all. Share your own thoughts and experience, accounts may be terminated for violations.
  • Welcome to AcornDomains.co.uk, a friendly community for UK domain investors, developers and anyone interested in domain names.

    Whether you're looking to buy or sell domains, learn more about the UK domain market, get feedback on your names, or simply chat with other domainers, you're in the right place. AcornDomains has been bringing together people from across the UK domain industry for many years, from complete beginners to experienced investors.

    Have a look around, join the discussions and, if you haven't already, create a free account and introduce yourself.

Javascript Variable

deedee is verified member.

Nominet Member
Nominet Registrar
Joined
May 8, 2013
Posts
2,604
Reaction score
916
Hi All,

I know there is some programming awesomeness around here so hope you dont mind me asking. Im trying to make a soundcloud widgit api variable global scope, so I can access in another function. Probably simple but cant get my head round it . Heres the souncloud widget api bit:



(function(){
var widgetIframe = document.getElementById('sc-widget'),
widget = SC.Widget(widgetIframe);

widget.bind(SC.Widget.Events.READY, function() {
widget.bind(SC.Widget.Events.PLAY, function() {
getOutput();
// get information about currently playing sound
widget.getCurrentSound(function(currentSound) {
console.log('sound ' + currentSound.get('') + 'began to play');
});
});
// get current level of volume
widget.getVolume(function(volume) {
console.log('current volume value is ' + volume);
});
// set new volume level
widget.setVolume(1.0);
// get the value of the current position
});

}());



I need to get the track name currentSound into a global outside the scope of this function. Any help appreciated.
 
Just declare it outside of the function. You don't need to give it a value just create it.
eg
<script>
var a;
function dosomething()
{
var b;
a=4; b=5;
}
</script>


'a' will be 4 throughout your code when set however 'b' will only exist and be 5 inside your function.
 
Thanks for your help Edwin and Rob ! Slowly getting my head round scope.

Okay... so this is where i got too:

Ive declared the var trackName outside function ( so it exists in global scope ?...thank you )

Im then setting that variable within the soundcloud api function ( trackName = 'Song ' + currentSound.get; )

Im then trying to add this to a url parameter further down. I have the system working... it sends me emails on the play event , but the track name trackName var comes in as undefined.

Heres my current code minus the email stuff, the variable comes in as undefined though



<script type="text/javascript">
var trackName;

(function(){
var widgetIframe = document.getElementById('sc-widget'),
widget = SC.Widget(widgetIframe);

widget.bind(SC.Widget.Events.READY, function() {
widget.bind(SC.Widget.Events.PLAY, function() {
getOutput();
// get information about currently playing sound
widget.getCurrentSound(function(currentSound) {
console.log('sound ' + currentSound.get('') + 'began to play');

trackName = 'Song ' + currentSound.get;

});
});
// get current level of volume
widget.getVolume(function(volume) {
console.log('current volume value is ' + volume);
});
// set new volume level
widget.setVolume(1.0);
// get the value of the current position
});

}());



// handles the play event for player
function getOutput() {

getRequest(
'track.php?v='+ trackName, // URL for the PHP file
drawOutput, // handle successful request
drawError // handle error
);
return false;
}
 
Thanks for your perseverance on this. It' s doing my head in ! Even if i define the var trackName as something definite, its not passing . Heres my full code.

In the php get request I have an email script.This is all fine and sending. Just the trackName variabe comes in as undefined still.

<script type="text/javascript">
var trackName;

(function(){
var widgetIframe = document.getElementById('sc-widget'),
widget = SC.Widget(widgetIframe);

widget.bind(SC.Widget.Events.READY, function() {
widget.bind(SC.Widget.Events.PLAY, function() {

// get information about currently playing sound
widget.getCurrentSound(function(currentSound) {
console.log('sound ' + currentSound.get('') + 'began to play');

trackName = 'Trying To Get Trackname From Widget';

});
});
// get current level of volume
widget.getVolume(function(volume) {
console.log('current volume value is ' + volume);
});
// set new volume level
widget.setVolume(1.0);

getOutput();
});





// handles the play event for link
function getOutput() {

getRequest(
'track.php?v='+ trackName, // URL for the PHP file
drawOutput, // handle successful request
drawError // handle error
);
return false;
}
// handles drawing an error message
function drawError() {
var container = document.getElementById('output');
container.innerHTML = 'error!';
}
// handles the response, adds the html
function drawOutput(responseText) {
var container = document.getElementById('output');
container.innerHTML = responseText;
}
// helper function for cross-browser request object
function getRequest(url, success, error) {
var req = false;
try{
// most browsers
req = new XMLHttpRequest();
} catch (e){
// IE
try{
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
// try an older version
try{
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
return false;
}
}
}
if (!req) return false;
if (typeof success != 'function') success = function () {};
if (typeof error!= 'function') error = function () {};
req.onreadystatechange = function(){
if(req.readyState == 4) {
return req.status === 200 ?
success(req.responseText) : error(req.status);
}
}
req.open("GET", url, true);
req.send(null);
return req;
}

}());
</script>
 
@seemly Thanks for your time anyway. I'll dm you a link in a bit just in case you have a spare 5 mins to see in context. Either way, thanks for the input.
 
Top Bottom