开发者

Trouble performing simple GET request returning JSON with Javascript

开发者 https://www.devze.com 2023-03-10 11:38 出处:网络
I\'m horrible at Javascript, so sorry in advance for what I\'m going to go ahead and assume is an amazingly stupid question.

I'm horrible at Javascript, so sorry in advance for what I'm going to go ahead and assume is an amazingly stupid question.

I'm simply trying to perform a GET request to GitHub's public repo API for a given user, and return the value as JSON.

Here's the function I'm trying to use:

function get_github_public_repos(username) {

    var the_url = "http://github.com/api/v2/json/repos/show/" + username

    $.ajax({
      url: the_url,
      dataType: 'json',
      type: 'get',
      success: function(data) {
        alert('raw data: ' + data)
        var json_response = $.parseJSON(data);
        alert(json_response);
      }
    });
}

This is returning Null for data. And in the console, I 开发者_运维百科see Failed to load resource: cancelled. I know the URL is correct, because if I run curl on the url, it returns the expected data.


jQuery's ajax function supports JSONP which allows cross-domain requests (which you need because you're trying to request data from github.com from another domain). Just change the dataType from 'json' to 'jsonp';

function get_github_public_repos(username) {

    var the_url = "http://github.com/api/v2/json/repos/show/" + username

    $.ajax({
      url: the_url,
      dataType: 'jsonp',
      type: 'get',
      success: function(data) {
        var json_response = data;
        alert(data);
      }
    });
}

UPDATE: It's import to note that the end pint (in this case github.com's API) has to support JSONP for this to work. It's not a guarnateed solution for ANY cross-domain request as pointed out in the comments.


JavaScript is subject to cross-domain restrictions when making requests on a different server.


Well, unless you run your code in the github.com domain, that won't work.

You can use simle ajax only in your domain.

One solution is to create a proxy for it. Make a page on your server that does one thing, gets your requested (out of domain) content with curl, and prints it. Then you call this proxy with ajax.


The XmlHttpRequest object (which $ajax uses) cannot download content from a different domain due to the same origin policy. You would need to use something such as JSONP to be able to do this from a browser.


As the others have said, you cannot execute ajax on a remote domain.

You will need to write a server sided script on your domain (such as php), that will do the dirty work retrieving the information needed from the github domain.

Then, use your ajax to query your server side script for the information.


I know the URL is correct, because if I run curl on the url, it returns the expected data.

Use that idea to get your ajax working. Create a proxy page on your site that uses curl to retrieve the data you want, then have your "the_url" variable point to that page on your site. Cross-domain restrictions prevent you from being able to use ajax in the manner you attempted.

0

精彩评论

暂无评论...
验证码 换一张
取 消