1

我使用下面的代码成功地向 lastFM 发送了一个 getJson 请求。此代码位于 javascript 脚本中。我可以从 getJson 函数中获取结果并将其用作该函数之外的变量,即在调用 javaScript 中的 this 中吗?

function getArtistInfo(lastFmArtist) {

    var urlArtist = 'http://ws.audioscrobbler.com/2.0/?callback=?',
        params = {
            method:  "artist.getInfo",
            artist: lastFmArtist,
            format:  "json",
            api_key: "xxxxxxxxxx"
        };

    $.getJSON(urlArtist, params, function(data) {

        var myartist = data.artist.bio.summary;

    });
}

alert(myartist);
4

3 回答 3

2

你可以使用回调

function isFunction(object) {
  return (typeof object == 'function');
}

function getArtistInfo(lastFmArtist, callback) {

  var urlArtist = 'http://ws.audioscrobbler.com/2.0/?callback=?',
  var params = {
        method:  "artist.getInfo",
        artist: lastFmArtist,
        format:  "json",
        api_key: "xxxxxxxxxx"
  };

  $.getJSON(urlArtist, params, function(data) {
    var myartist = data.artist.bio.summary;
    if (isFunction(callback))
    {
      callback(myartist);
    }
  });
}

function getArtistInfoComplete(myartist )
{
  alert(myartist);
}

然后调用它

getArtistInfo(lastFmArtist, getArtistInfoComplete);
于 2013-07-11T18:10:41.847 回答
0

试试这个方法:

 $.ajax({
      type:"GET",
      url:"file.php",
      success:function(){
           // get your php file returned values
      },
      error:function(){
           // error message
      }
 });

尝试根据success函数内部的返回值进行所有编码。这样,您甚至不需要使用全局变量。如果您尝试访问外部的返回值,success您将一无所获。

于 2013-07-11T17:51:53.700 回答
-1

当然。

因此,首先,回调范围之外的变量将帮助您,而不是在回调中分配 myartist ,您可以将其分配给将存在于函数外部的变量。

var myartist;
function getArtistInfo(lastFmArtist) {

    var urlArtist = 'http://ws.audioscrobbler.com/2.0/?callback=?',
    params = {
        method:  "artist.getInfo",
        artist: lastFmArtist,
        format:  "json",
        api_key: "xxxxxxxxxx"
    };

    $.getJSON(urlArtist, params, function(data) {
      myartist = data.artist.bio.summary.toString();
    });
}

但也很高兴知道它是否有效,因此您需要另一个全局来跟踪回调是否已命中。

使用这样的互联网服务,大多数情况下会在您在线时立即返回,但在尝试使用回调中的变量之前检查以确保它正常工作总是好的。

您可能还想查看 Promise 函数,如下面的评论所示。

于 2013-07-11T17:47:47.007 回答