Получение удаленного канала JSON и отображение некоторых значений - PullRequest
0 голосов
/ 09 июля 2011

Я хочу получить следующий поток JSON из https://api.github.com/users/mojombo:

{
    "public_repos": 52,
    "type": "User",
    "bio": "",
    "url": "https://api.github.com/users/mojombo",
    "avatar_url": "https://secure.gravatar.com/avatar
        /25c7c18223fb42a4c6ae1c8db6f50f9b?d=https:  
        //gs1.wac.edgecastcdn.net/80460E/assets%2Fimages%2Fgravatars%2Fgravatar-140.png",
    "login": "mojombo",
    "public_gists": 66,
    "following": 11,
    "created_at": "2007-10-20T05:24:19Z",
    "email": "tom@github.com",
    "followers": 2252,
    "company": "GitHub, Inc.",
    "blog": "http://tom.preston-werner.com",
    "name": "Tom Preston-Werner",
    "location": "San Francisco",
    "html_url": "https://github.com/mojombo",
    "hireable": true,
    "id": 1

}

У меня есть следующий HTML-код, который я хочу заполнить значением для email послестраница загрузилась:

<div id='github-mojombo'></div>

Я не могу заставить JQuery делать то, что я хочу.По общему признанию, я не полностью понимаю обратные вызовы и / или имею большой опыт работы с JQuery.В приведенном ниже примере user_email не определено.Что я делаю неправильно?Как бы я изменил его, чтобы он вставлял электронную почту в эти DIVs?

<script>
    jQuery(document).ready(function($) {
        $.getJSON("https://api.github.com/users/mojombo?callback=?", 
            function(data) {
            var user_data = data;
        var user_email = user_data.email;
        alert('Got email ' + user_email);
        });
    });
</script>

Ответы [ 4 ]

1 голос
/ 11 июля 2011

вы можете использовать следующие

function(response)

var List = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d; $.each(List, function() { this["public_repos"]; });

вы должны проверить длину ответа, если она не равна 0, тогда вы можете просмотреть и получить результат, используя ключевое слово this ["columnname"]

Надеюсь, это поможет вам.

1 голос
/ 09 июля 2011
jQuery(document).ready(function($){
  $.getJSON("https://api.github.com/users/mojombo?callback=?", function(data){
    var user_email = data.data.email; //note the data.data
    alert('Got email ' + user_email);
  });
});
1 голос
/ 09 июля 2011

Я бы сначала проанализировал ответ как JSON, прежде чем пытаться получить доступ к свойствам ответа:

var user_data = JSON.parse(data)
0 голосов
/ 09 июля 2011

Вы не можете выполнять запросы AJAX для нескольких доменов (для которых getJSON, по сути, является просто оберткой), это просто запрещено браузерами.Вот где приходит обратный вызов. Что вы можете сделать, это написать тег script на странице с помощью функции getScript jQuery.Обратный вызов обернет возвращаемый JSON, так что содержимое тега script будет вашей функцией, а JSON будет передан в качестве аргумента.Внутри вашей функции вы затем обрабатываете JSON.Код будет выглядеть примерно так:

function myCallback(jsonData)
{
    // do something with the JSON

    var user_data = JSON.parse(data);
    var user_email = user_data.email;
    alert('Got email ' + user_email);
}

jQuery(document).ready(function($){
    $.getScript("https://api.github.com/users/mojombo?callback=myCallback");
});

Вывод https://api.github.com/users/mojombo?callback=myCallback будет выглядеть примерно так:

myCallback('{"name":"foo", "email":"foo@bar.com", ...rest of the json...}');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...