AJAX cross domain call AJAX cross domain call javascript javascript

AJAX cross domain call


The only (easy) way to get cross-domain data using AJAX is to use a server side language as the proxy as Andy E noted. Here's a small sample how to implement that using jQuery:

The jQuery part:

$.ajax({    url: 'proxy.php',    type: 'POST',    data: {        address: 'http://www.google.com'    },    success: function(response) {        // response now contains full HTML of google.com    }});

And the PHP (proxy.php):

echo file_get_contents($_POST['address']);

Simple as that. Just be aware of what you can or cannot do with the scraped data.


You will need to dynamically insert a script tag into the page that references the data. Using JSONP, you can execute some callback function when the script has loaded.

The wikipedia page on JSONP has a concise example; the script tag:

<script type="text/javascript" src="http://domain1.com/getjson?jsonp=parseResponse"></script>

would return the JSON data wrapped in a call to parseResponse:

parseResponse({"Name": "Cheeso", "Rank": 7})

(depending on the configuration of the getjson script on domain1.com)

The code to insert the tag dynamically would be something like:

var s = document.createElement("script");s.src = "http://domain1.com/getjson?jsonp=parseResponse";s.type = "text/javascript";document.appendChild(s);


You can use YQL to do the request without needing to host your own proxy. I have made a simple function to make it easier to run commands:

function RunYQL(command, callback){     callback_name = "__YQL_callback_"+(new Date()).getTime();     window[callback_name] = callback;     a = document.createElement('script');     a.src = "http://query.yahooapis.com/v1/public/yql?q="             +escape(command)+"&format=json&callback="+callback_name;     a.type = "text/javascript";     document.getElementsByTagName("head")[0].appendChild(a);}

If you have jQuery, you may use $.getJSON instead.

A sample may be this:

RunYQL('select * from html where url="http://www.google.com/"',       function(data){/* actions */});