如何在XMLHttpRequest中发出GET请求?

时间:2019-06-27 17:29:00

标签: javascript api xmlhttprequest

我想向GitHub API发出此GET请求:https://developer.github.com/v3/repos/#list-all-public-repositories

但是我不知道该怎么做。我已经做了一些curl处理,但这是我第一次使用HTTP和API请求。

我已经尝试了一些在线教程,但是它们并没有完全显示如何发出特定的GET请求。

这是我到目前为止所拥有的:

function reqListener () {
    console.log(this.responseText);
  }
  var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
  var oReq = new XMLHttpRequest();
  oReq.addEventListener("load", reqListener);
  oReq.open("GET", "https://api.github.com/");
  oReq.send();

我得到了以下信息,而不是来自GitHub的带有存储库信息的JSON:

{"current_user_url":"https://api.github.com/user","current_user_authorizations_html_url":"https://github.com/settings/connections/applications{/client_id}","authorizations_url":"https://api.github.com/authorizations","code_search_url":"https://api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"https://api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"https://api.github.com/user/emails","emojis_url":"https://api.github.com/emojis","events_url":"https://api.github.com/events","feeds_url":"https://api.github.com/feeds","followers_url":"https://api.github.com/user/followers","following_url":"https://api.github.com/user/following{/target}","gists_url":"https://api.github.com/gists{/gist_id}","hub_url":"https://api.github.com/hub","issue_search_url":"https://api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"https://api.github.com/issues","keys_url":"https://api.github.com/user/keys","notifications_url":"https://api.github.com/notifications","organization_repositories_url":"https://api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"https://api.github.com/orgs/{org}","public_gists_url":"https://api.github.com/gists/public","rate_limit_url":"https://api.github.com/rate_limit","repository_url":"https://api.github.com/repos/{owner}/{repo}","repository_search_url":"https://api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"https://api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"https://api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"https://api.github.com/gists/starred","team_url":"https://api.github.com/teams","user_url":"https://api.github.com/users/{user}","user_organizations_url":"https://api.github.com/user/orgs","user_repositories_url":"https://api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"https://api.github.com/search/users?q={query}{&page,per_page,sort,order}"}

编辑:我已经能够获得第一页,但是我想不断地浏览这些页面。我不了解有关如何执行此操作的文档。到目前为止,我的代码是这样的:

<script type="text/javascript">
    const xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function () {
        if(xhr.readyState == 4)
        {
            if(xhr.status == 200)
            {
                console.log("Something went right!");
                var json_results = JSON.parse(xhr.responseText);
                json_length = Object.keys(json_results).length
                var str = "";
                for(var i = 0; i < json_length; i++)
                {
                    str += JSON.stringify(json_results[i].description) + "\n";
                }
                document.getElementById('api-content').textContent = str;
            }
            else if(xhr.status == 404)
            {
                console.log("404 NOT FOUND!");
            }
            else
            {
                console.log("Something went wrong!");
            }
        }
    };

    xhr.open("get", "https://api.github.com/repositories", true);
    xhr.send();
</script>

3 个答案:

答案 0 :(得分:2)

XMLHttpRequest get在这里可以正常工作,它是您发出请求的URL。 检查github api文档以获得所需的链接和参数。

https://developer.github.com/v3/

答案 1 :(得分:2)

尝试一下:

function reqListener (response) {
    console.log(response);
}

var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.open("GET", "https://api.github.com/repositories");
oReq.send();

请参阅文档以正确使用Github API。

答案 2 :(得分:0)

https://api.github.com/发出GET请求不会给您带来a JSON with Repository information from GitHub的结果。您将获得一个页面,其中显示了指向相关页面/信息的URL的JSON。

解决方案:

  

我得到了以下信息,而不是来自GitHub的带有存储库信息的JSON:

{"current_user_url":"https://api.github.com/user","current_user_authorizations_html_url":"https://github.com/settings/connections/applications{/client_id}","authorizations_url":"https://api.github.com/authorizations","code_search_url":"https://api.github.com/search/code?q={query}{&page,per_page,sort,order}","commit_search_url":"https://api.github.com/search/commits?q={query}{&page,per_page,sort,order}","emails_url":"https://api.github.com/user/emails","emojis_url":"https://api.github.com/emojis","events_url":"https://api.github.com/events","feeds_url":"https://api.github.com/feeds","followers_url":"https://api.github.com/user/followers","following_url":"https://api.github.com/user/following{/target}","gists_url":"https://api.github.com/gists{/gist_id}","hub_url":"https://api.github.com/hub","issue_search_url":"https://api.github.com/search/issues?q={query}{&page,per_page,sort,order}","issues_url":"https://api.github.com/issues","keys_url":"https://api.github.com/user/keys","notifications_url":"https://api.github.com/notifications","organization_repositories_url":"https://api.github.com/orgs/{org}/repos{?type,page,per_page,sort}","organization_url":"https://api.github.com/orgs/{org}","public_gists_url":"https://api.github.com/gists/public","rate_limit_url":"https://api.github.com/rate_limit","repository_url":"https://api.github.com/repos/{owner}/{repo}","repository_search_url":"https://api.github.com/search/repositories?q={query}{&page,per_page,sort,order}","current_user_repositories_url":"https://api.github.com/user/repos{?type,page,per_page,sort}","starred_url":"https://api.github.com/user/starred{/owner}{/repo}","starred_gists_url":"https://api.github.com/gists/starred","team_url":"https://api.github.com/teams","user_url":"https://api.github.com/users/{user}","user_organizations_url":"https://api.github.com/user/orgs","user_repositories_url":"https://api.github.com/users/{user}/repos{?type,page,per_page,sort}","user_search_url":"https://api.github.com/search/users?q={query}{&page,per_page,sort,order}"}

确定所需的“存储库信息” 并从上面列出的(JSON)URL中获取。

例如:(如果Github用户是VCone

  • "user_url": "https://api.github.com/users/{user}"
    意味着转到URL:https://api.github.com/users/VCone

  • "user_repositories_url": "https://api.github.com/users/{user}/repos{?type,page,per_page,sort}"
    表示转到URL:https://api.github.com/users/VCone/repos
    或者可以是https://api.github.com/users/VCone/repos?type=xxxx,sort=xxxx,page=xxxx 等等。