Jquery.Getjson - Access-Control-Allow-Origin Issue

JQuery.getJSON - 'Access-Control-Allow-Origin'

Ok so if you know about the same origin policy, you know that by default a browser can only make request to the same host. One way would be to call a server side script on your server (PHP), and that PHP fetches the remote JSON, and returns the data to your javascript. Search for JSONP and CORS for alternative solutions.

JS:

$(document).ready(function () {
$.getJSON(
'/proxy.php',
{
id: 5
},
function (response) {
var data = response.data;
// do something with data
}
);
});

proxy.php:

    $id = (integer) $_GET['id'];
$response = file_get_contents('www.some-remote-site.com/api/id=' . $id);

return $response

No 'Access-Control-Allow-Origin' header on $.getJSON request

You are apparently attempting a cross-origin Ajax request. That means you're trying to contact a server on a different domain/port than the one that the originating webpage is on. This is called a cross origin request and is not permitted by default. You can read about a browser's same origin security policy here.

In order to be allowed to make a cross origin request directly, the server that you are making the request to must specifically allow it.

The Access-Control-Allow-Origin header is one way that it would allow this type of access, but it is apparently not applying that header and thus the request is being denied by the browser. You can read about how CORS (cross origin resource sharing) works here.

Other ways to make cross origin requests are using JSONP (also requires cooperation from the destination server to support a JSONP request) or via a proxy (another server that you are allowed to contact that can make the request to the desired server for you and return you the results). The proxy requires your own server code on a server you do have permission to reach, but does not require cooperation from the target server.

Per the doc on this page, it appears that Markit On Demand does support JSONP so you could use that form for the cross origin request. jQuery's ajax supports that format if you set the appropriate dataType: "jsonp" option for $.ajax().

Jquery to parse Json Origin null is not allowed by Access-Control-Allow-Origin

Try use jquery ajax:

$.ajax({
url:"http://api.angel.co/1/tags/1654/startups?callback=aaa",
type:'GET',
dataType:'JSONP',
success: function(data){
$('body').append( "Name: " + data );
}
});

Access-Control-Allow-Origin getJSON Rails

try this out

instead of

$.getJSON('http://localhost:3000/tags.json' + '&callback=?', function(data)

use this

$.getJSON('/tags.json' + '?callback=?', function(data)

jQuery getJSON works locally, but not cross domain

You need to look in to JSONP.

Essentially, when you try to load JSON from another domain, it fails because there is a domain boundary you can not cross. To avoid this, you have to PAD it (P in JSONP). Padding it is essentially wrapping it in a function call (where the function name resides on your client.) e.g. a "normal" JSON response (say, for example, getjson.php):

{foo:'bar'}

JSON with a callback of parseJSON becomes (Say, for example, getjson.php?callback=parseJSON):

parseJSON({foo:'bar'})

Notice how the value that was supplied in callback becomes the name of the function your JSON response is now wrapped in.

Then your client will want to pass it to parseJSON, a function that exists on your client (that you've defined). jQuery (and other libraries) try to take care of this for you by generating some "random" function and then sending the response back through your original callback (all this is done under the hood).

If you have control over the server page generating the JSON, implement a callback method so you can supply how the JSON should be wrapped so you can then work with it on your end. (This is only necessary when you're dealing with data from a domain other than the page the client is currently on).


UPDATE

To basically solve the problem you're having, you need to find a way to get your JSON information in to a JSONP call. Without knowing what language your "page.json" is in, here's the pseudo-code logic that it should contain:

if GET_VARIABLE("callback") is supplied

print GET_VARIABLE("callback") and an open parenthesis
print normal JSON data
print closing parenthesis

else

print normal JSON data

end if

If you decide to hard-code the function name instead of allow it to be supplied in the url as "callback", then you need to remember it. For the next example, let's imagine we named it MyJSONPCallback

Now, in your client code, you can go ahead of use:

$.ajax({
url: 'http://anotherdomain.com/page.json?format=json',
dataType: 'json',
jsonpCallback: 'MyJSONPCallback', // specify the callback name if you're hard-coding it
success: function(data){
// we make a successful JSONP call!
}
});


Related Topics



Leave a reply



Submit