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 */});