cross domain jsonp.
var jsonp = {
// From http://javascriptweblog.wordpress.com/2010/11/29/json-and-jsonp/
fetch: function(url, callback) {
var url_get = url.split('?').pop();
var get_prams = url_get.split('&');
var params = {};
for (var i = 0; i < get_prams.length; i++) {
var new_param = get_prams[i].split('=');
params[new_param[0]] = new_param[1];
}
var fn = params.callback || 'JSONPCallback';
window[fn] = this.evalJSONP(callback);
url = url.replace('=JSONPCallback', '=' + fn);
var scriptTag = document.createElement('SCRIPT');
scriptTag.src = url;
document.getElementsByTagName('HEAD')[0].appendChild(scriptTag);
scriptTag.addEventListener('error', function(e) {
// just let me know there is an error but dont do anything
console.log(e.type);
});
},
evalJSONP: function(callback) {
return function(data) {
var validJSON = false;
if (typeof data === 'string') {
validJSON = JSON.parse(data);
} else {
validJSON = JSON.parse(JSON.stringify(data));
}
if (validJSON) {
callback(validJSON);
} else {
throw('JSONP call returned invalid or empty JSON');
}
};
}
};
//example
jsonp.fetch('http://example.com/something-that-returns-json.json?callback=JSONPCallback', function(data) {
console.log(data); // stuff returned
});