首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript:解析来自GitHub API的JSONP回调响应

JavaScript:解析来自GitHub API的JSONP回调响应
EN

Stack Overflow用户
提问于 2015-06-26 05:27:11
回答 1查看 385关注 0票数 0

我正在创建一个快速路由,它使用一个添加到端点的GitHub模式调用?callback=foo API,这样它将返回我需要解析的Link:头,因为它包含了我必须调用的链接,以获得响应的下一页。

问题是响应具有预期的模式,但是当我试图创建一个函数来梳理函数的metadata部分时,它们会出现未定义的情况。

我的代码:

代码语言:javascript
运行
复制
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);

注意事项1:响应如下:

代码语言:javascript
运行
复制
        /**/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.stringified,但是当我JSON.parse(response)时,它返回一个错误。我不知道如何访问嵌入得很深的Link:头,甚至data,它看起来也像JSON。

注释2 res.meta和res.data日志为未定义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-26 05:31:46

响应不是JSON,而是http://en.wikipedia.org/wiki/JSONP#JSONP。JSONP是一种跨域的数据检索机制.您不使用XHR (例如,app.get)请求JSONP,而是使用script标记。(因为XHR受到同一原产地政策的限制;script标记则不受限制。)

如果通过XHR检索数据的调用有效,则意味着在您的情况下允许跨域XHR调用(服务器支持具有页面来源的跨源资源共享,浏览器支持CORS)。您可以通过删除URL中的?callback=resp来获得JSON而不是JSONP。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31065558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档