teekay wrote:
The only dependency is CORS, means the Piwigo Webserver has to set an Access-Control-Allow-Origin header. The piwigo.org demo server doesn't, so a jsfiddle won't work.
By the way, today I have discovered that CORS can be bypassed by javascript.
Simply load the url as script source. Then you can parse the data from that script.
http://stackoverflow.com/questions/6132 … out-jquery
So getting the json data from cross-domains without CORS enabled (like piwigo.org) is also possible.
@edit: actually this is not working because the data need to be jsonp not json.
Last edited by eliz82 (2017-01-18 14:07:47)
Offline
teekay wrote:
I'll add one using jQuery:
a similar one in vanilla javascript
<!DOCTYPE html> <html> <head> <script type="text/javascript"> var p_site = 'http://yoursite.com/piwigo/ws.php'; //piwigo web api location var p_query = '?format=json&method=pwg.categories.getImages&per_page=10&order=date_available%20desc'; //piwigo api query parameters var request = new XMLHttpRequest(); request.open('GET', p_site + p_query, true); request.onload = function() { if (request.status >= 200 && request.status < 400) { // Success! var mydata = JSON.parse(request.responseText); //alert(JSON.stringify(mydata, null, ' ')); //show the Piwigo Api response if (mydata.result.images) { //if response array is not null for (i=0; i < mydata.result.images.length; ++i) { //loop the response array document.getElementById('last10images').innerHTML += '<a href="'+ mydata.result.images[i].page_url + '"><img src="' + mydata.result.images[i].derivatives.square.url + '" /></a>'; } } } else { // We reached our target server, but it returned an error } }; request.onerror = function() { // There was a connection error of some sort }; request.send(); </script> </head> <body> <div id="last10images"></div> </body> </html>
the location of the html code need to be on the same domain as your piwigo gallery. otherwise you must enable CORS.
Last edited by eliz82 (2016-12-16 15:37:09)
Offline
eliz82 wrote:
So getting the json data from cross-domains without CORS enabled (like piwigo.org) is also possible.
@edit: actually this is not working because the data need to be jsonp not json.
well seems it works also with json if you converted to jsonp. example:
<!DOCTYPE html> <html> <head> <meta http-equiv="cache-control" content="no-cache" /> </head> <body> <div id="last10images"></div> <script type="text/javascript"> var json_url = 'http://piwigo.org/demo/ws.php?format=json&method=pwg.categories.getImages&per_page=5&order=date_available%20desc'; function myCallback1(mydata) { //alert(JSON.stringify(mydata, null, ' ')); //show the Piwigo Api response if (mydata.result.images) { //if response array is not null for (i=0; i < mydata.result.images.length; ++i) { //loop the response array document.getElementById('last10images').innerHTML += '<a href="'+ mydata.result.images[i].page_url + '" target="_blank"><img src="' + mydata.result.images[i].derivatives.square.url + '" /></a>'; } } } var script = document.createElement('script'); script.src = 'https://json2jsonp.com/?url=' + encodeURIComponent(json_url) + '&callback=myCallback1'; document.getElementsByTagName('head')[0].appendChild(script); </script> </body> </html>
this is useful if you don't have access to PHP on your server side (only html), or to enable CORS on the piwigo gallery server side. very rare case i would say, but i presented just for programing fun
Last edited by eliz82 (2017-01-18 14:35:23)
Offline