1

所以我想要一个简单的脚本,它可以显示用户是否在 twitch 上在线。我对一般的编码很熟悉,但我从来没有真正处理过回调。所以这是我的基本代码。

jQuery(document).ready(function(){

    var streamLink = 'http://api.justin.tv/api/stream/summary.json?channel=ReasNSC2&jsonp=?';

    $.getJSON(streamLink, function(a) {
        if (a.viewers_count != "0")
        {
            alert(true)
        }else {
            alert(false)
        };
    });
});

上面的代码工作正常。我得到了预期的结果。所以现在我想在我的代码中使用结果。所以我的第一个想法是:让我们使用返回语句。

 jQuery(document).ready(function(){
    alert(getStatus())
});
    function getStatus()
    {
        var streamLink = 'http://api.justin.tv/api/stream/summary.json?channel=ReasNSC2&jsonp=?';

        $.getJSON(streamLink, function(a) {
            if (a.viewers_count != "0")
            {
                return(true)
            }else {
                return(false)
            };
        });
    }

所以我“创造”了这个。不会工作。我在互联网和 stackoverflow 上找到了很多解释,但我无法提取真正帮助我的东西。有人可以帮我解决这个基本问题吗?

我想做这个请求,然后继续它。非常感谢提前:)

4

3 回答 3

1

这是因为您处于回调中,您需要使用回调函数才能将值发送到。就像是:

function getStatus()
{
    var returnValue;
    var streamLink = 'http://api.justin.tv/api/stream/summary.json?channel=ReasNSC2&jsonp=?';

    $.getJSON(streamLink, function(a) {
        if (a.viewers_count != "0") {
            returnFunction(true);
        }
        else {
            returnFunction(false);
        };
    });
}

function returnFunction(value)
{
    //do something with your value.
}
于 2013-09-02T09:16:36.033 回答
1

您已经在代码中使用了回调,例如:

$.getJSON(streamLink, function(a) {... //where function(a) is the anonymus callback function

如果您将回调函数作为参数添加到“getStatus”函数,例如:

function getStatus(callback){
  $.getJSON(streamLink, function(a) {
    if (a.viewers_count != "0") {
      callback(true);
    } else {
      callback(false);
    };
  });
}

并像这样调用它:

jQuery(document).ready(function(){
  getStatus(function(result){ alert(result); });
  //or even in this case you could just add the 'alert' as the callback:
  getStatus(alert);
});
于 2013-09-02T09:27:37.443 回答
0

你需要做类似的事情

jQuery(document).ready(function () {
    getStatus(function (status) {
        alert(status)
    })
});

function getStatus(callback) {
    var streamLink = 'http://api.justin.tv/api/stream/summary.json?channel=ReasNSC2&jsonp=?';

    function callCallback(result) {
        if ($.isFunction(callback)) {
            callback(result)
        }
    }

    $.getJSON(streamLink, function (a) {
        if (a.viewers_count != "0") {
            callCallback(true)
        } else {
            callCallback(false)
        };
    });
}
于 2013-09-02T09:19:07.253 回答