如何在回调函数中更新和传递变量

时间:2014-09-17 03:10:05

标签: javascript jquery callback scope soundcloud

我正在使用SoundCloud API,我创建了一个回调函数,首先获取一个歌曲URL,然后通过SoundCloud API获取与该URL相关的声音ID然后将该ID传递给回调以使用它进行流式传输并更新页面。它确实收集了来自API的数据,但是varibale在本地更新并在公共场合保持UNDEFINED。

以下是代码和DEMO:http://jsfiddle.net/aq309twd/

function transfer(item, callback) {

    permalink_url = myURL;

    SC.get('http://api.soundcloud.com/resolve.json?url=' + permalink_url + '/tracks&client_id=' + client_id, function (result) {
        trackID = result.id;
    });

    callback(trackID);
}
transfer("", function (num) {
    //$(".item").text(num);
    SC.get("/tracks/" + num, function (sound) {
        SC.stream("/tracks/" + num, function (sound) {
            //somefountion
        });

    });

});

SC.get trackID更新,但此函数之外的任何地方都未定义。 有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您的函数SC.get看起来正在执行异步操作,可能是Ajax调用,因此在下一行callback(trackID);执行的操作不会在ajax调用响应的同时执行。

将回调函数移动到SC.get中会更有意义:

SC.get('http://api.soundcloud.com/resolve.json?url=' + permalink_url + '/tracks&client_id=' + client_id, function (result) {
    var trackID = result.id;
    callback(trackID);
});