JavaScript:从GitHub API解析JSONP回调响应

时间:2015-06-26 05:27:11

标签: javascript jsonp github-api

我正在创建一个Express路由,该路由调用GitHub API并添加一个?callback=foo模式,以便它返回链接头,我需要解析{{ 1}}标头,因为它包含我必须调用以获取响应的下一页的链接。

问题是响应具有预期的模式,但是当我尝试创建一个函数来梳理函数的Link:meta部分时,它们会显示为未定义。

我的代码:

data

注1 :响应如下:

app.get('/populate', function(req, res, next) {
        console.log('/populate route hit');
        var token = "<something>";
        var options = {
            url: 'https://api.github.com/users?callback=resp',
            headers: {
                'User-Agent': 'Our-App',
                'Authorization': 'token '+ token 
            }
        };
        api(options) // 'api' is request-promise module, makes http requests
        .then(function(response) {
            console.log(response); // Note 1
            function resp(res) {
                var meta = res.meta;
                var data = res.data;
                console.log('meta ', meta); // Note 2
                console.log('data ', data);
            }
            resp(response);

响应看起来像是JSON.stringified但是当我 /**/resp({"meta":{"X-RateLimit-Limit":"5000","X-RateLimit-Remaining":"4993", "X-RateLimit-Reset":"1435297775","X-OAuth-Scopes":"public_repo, user:email", "X-Accepted-OAuth-Scopes":"repo","Cache-Control":"private, max-age=60, s-maxage=60", "Vary":"Accept, Authorization, Cookie, X-GitHub-OTP", "ETag":"\"0cbbd180648a54f839a237b0302025db\"", "X-GitHub-Media-Type":"github.v3; format=json", "Link":[["https://api.github.com/users?callback=resp&since=46", {"rel":"next"}],["https://api.github.com/users{?since}", {"rel":"first"}]],"status":200},"data":[{"login":"mojombo","id":1, ...etc etc... }]}) 时它返回错误。我不知道如何访问深度嵌入的JSON.parse(response)标头,甚至是Link:,它们看起来也像JSON。

注意2 res.meta和res.data日志为 undefined

1 个答案:

答案 0 :(得分:1)

答案不是JSON,而是lookup( )。 JSONP是一种用于检索数据的跨域机制。您不使用XHR(例如script)来请求JSONP,而是使用script标记。 (因为XHR受JSONP限制; ?callback=resp标记不是。)

如果您通过XHR检索该数据的呼叫有效,则表示您的情况允许跨域XHR呼叫(服务器支持Same Origin Policy您的页面来源,浏览器支持CORS)。您可以通过删除网址中的{{1}}来获取JSON而不是JSONP。