Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing JSON service from localhost or file://

I am making a html page intended to be run locally on a PC, preferably without a local server runing (file://). I am also using jQuery to make manipulation/AJAX a little easier.

I am trying to load 2 results from the twitter API, but I get an error. The code is as follows:

$.getJSON("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=someuser&count=9", {},
    function (data) {
        $.each(data.items, doSomething1);
    });
$.getJSON("http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9", {},
    function (data) {
        $.each(data.items, doSomething2);
    });

I also tried the following code, but it didn't change the outcome.

$.getJSON("http://api.twitter.com/1/statuses/user_timeline.json",
    {
        count:          "9",
        screen_name:    "someuser"
    },
    function(data) {
        $.each(data.items, updateAWTweets);
    });
$.getJSON("http://search.twitter.com/search.json",
    {
        q:              "somequery",
        result_type:    "recent",
        count:          "9"
    },
    function(data) {
        $.each(data.items, updateHashTagTweets);
    });

I get the following error in chrome (on a localhost server):

XMLHttpRequest cannot load http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9. Origin http://localhost:62153 is not allowed by Access-Control-Allow-Origin.

or (with a file:// link)

XMLHttpRequest cannot load http://api.twitter.com/1/statuses/user_timeline.json?screen_name=someuser&count=9. Origin null is not allowed by Access-Control-Allow-Origin.

Does anyone know how I can fix this?

like image 461
dtech Avatar asked Mar 14 '11 14:03

dtech


People also ask

How do I access a JSON file?

JSON files are human-readable means the user can read them easily. These files can be opened in any simple text editor like Notepad, which is easy to use. Almost every programming language supports JSON format because they have libraries and functions to read/write JSON structures.

How do I view a JSON file in my browser?

Right click on JSON file, select open, navigate to program you want open with(notepad). Consecutive opens automatically use notepad.


1 Answers

You're running into the same-origin policy restriction - your script can't access any other domain apart from the one it was loaded from.

  1. You could give JSONP a try - that's one common solution to getting data across domains:

    • http://www.chazzuka.com/blog/?p=221
    • http://jquery-howto.blogspot.com/2009/04/twitter-jsonjsonp-api-url.html

    Your code would look something like this (note the addition of callback=? to the URL):

    $.getJSON("http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9&callback=?", 
              {},
              function (data) {
                      $.each(data.items, doSomething2);  
         });
    
  2. Another option is to setup a proxy - you can use Apache httpd as a proxy/reverse proxy to get around this restriction.

like image 99
no.good.at.coding Avatar answered Oct 19 '22 23:10

no.good.at.coding