如何引用getJSON / ajax中的数据超出范围?

时间:2014-07-16 23:56:41

标签: jquery ajax json instagram

我试图返回一个Instagram API网址字符串。不是对象,不是数据,但是当调用getUrl()时,它会返回一个字符串,然后我可以在getJSON中使用它。

棘手的是,感谢Instagram API,我首先需要从用户名生成用户ID(这是你看到的getJSON,顺便说一下工作正常),将该ID存储为user_id,然后将该ID插入我的字符串。

我理解我目前所处的工作是不正常的,因为ajax是异步的,而且因为user_id的使用超出了范围。所以我的问题是......我需要做什么?我觉得我很接近。

var username = foo;
var client_id = 1234567890;

function getUrl() {    

  function getUserID() {
    return 'https://api.instagram.com/v1/users/search?q=' + username + '&callback=?&client_id=' + client_id;
  }

  $.getJSON(getUserID(), function (data) {
    var user_id = data.data[0].id;
  });

  return 'https://api.instagram.com/v1/users/' + user_id + '/media/recent/?&client_id=' + client_id;

}

console.log(getUrl);

1 个答案:

答案 0 :(得分:1)

你需要做的是写一个回调函数,它将使用你的ajax调用的结果。此函数将从getUrl()内的异步调用接收正确的url,因此在回调函数中添加需要url的任何代码,它将在$.getJSON完成后立即执行。

var username = foo;
var client_id = 1234567890;

function getUrl(getURLCallBack) {
    var user_id = 'https://api.instagram.com/v1/users/search?q=' + username + '&callback=?&client_id=' + client_id;

    $.getJSON(user_id, function (data) {
        user_id = data.data[0].id;
        var url = 'https://api.instagram.com/v1/users/' + user_id + '/media/recent/?&client_id=' + client_id;
        //Your callback function will do the magic for you
        getURLCallBack(url);
    });
}

//In this example, f will be your callback
f = function (url) {
    alert(url);
}

getUrl(f);