-1

I am having trouble using the .getJSON JQuery method to return data from an external API*, but the .ajax method works fine.

using this code with .ajax works for me:

var apiKey = 'myKey',
requestURL = 'https://api.propublica.org/congress/v1/115/senate/members.json'; 


        $.ajax({
     url: requestURL, 
     type: "GET",
     dataType: 'json',
     headers: {'X-API-Key': apiKey }
   }).done(function(data){
   console.log(data)
   });

Using $.getJSON does not work for me:

var apiKey = 'myKey',
requestURL = 'https://api.propublica.org/congress/v1/115/senate/members.json'; 


    $.getJSON(requestURL + '?callback=?', {
        'X-API-Key': apiKey
    }, function(data){
    console.log(data);
    });

The only difference is I added "?callback=?" to the url as the documentation and several posts/tutorials say to so that it will return JSONP. I have tried changing the url to see if I can fix it and after several hours I cannot get it to work.

The error in the console that I get is this:

GET https://api.propublica.org/congress/v1/115/senate/members.json?callback=jQuery110203399070889473792_1523562076495&X-API-Key=myKey&_=1523562076496 net::ERR_ABORTED

If I take the "?callback=?" off of the url for the getJSON example, I get the message above and also this additional error message:

Failed to load https://api.propublica.org/congress/v1/115/senate/members.json?X-API-Key=myKey: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:81' is therefore not allowed access. The response had HTTP status code 401.

I am confused as to why this is not working since getJSON is supposed to be shorthand for the exact .ajax call I have above JQuery getJSON Documentation .

Do you know why .getJSON will not work but .ajax will?

2 Answers2

1

You cannot set http headers with getJSON, your API seems to require it to allows CORS. While you can use ajaxSetup to set the header, I wouldn't recommend it as all subsequent ajax calls will use those settings.

jQuery.ajaxSetup({headers: {'X-API-Key': apiKey }});
$.getJSON(requestURL, function(data){
    console.log(data);
});
Musa
  • 89,286
  • 16
  • 105
  • 123
-1

I believe the issue might be the fact that you cannot pass headers into $.getJSON.

Possible duplicate: How can I pass request headers with jQuery's getJSON() method?