I'm using a jscript to retrieve JSON data from Flickr. Works 100% in every browsers except IE.
I'm using the jquery each function that calls this specific function for IE:
//some code
if ($.browser.msie && window.XDomainRequest) {
var xdr;
var url = "http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key=" + apiKey + "&photoset_id=" + set + "&extras=url_sq&format=json&nojsoncallback=1";
xdr = new XDomainRequest();
if (xdr) {
xdr.open("get", url);
xdr.send();
var data = JSON.parse(xdr.responseText);
//some jquery stuff
}
}
In IE the function return's a syntax error in the var data = JSON.parse(xdr.responseText); but the error is random, it retrieves a random number of photos before showing the error..
I've checked all the variables involved and everything is returning OK.
I'm using the json2.js
UPDATE:
JSON possible results:
{
"photoset": {
"id": "72157627083924637",
"primary": "5943107169",
"owner": "63570294@N03",
"ownername": "motorespt.com",
"photo": [
{
"id": "5943107169",
"secret": "e6099e3936",
"server": "6029",
"farm": 7,
"title": "Peugeot 206",
"isprimary": "0",
"url_sq": "http://farm7.static.flickr.com/6029/5943107169_e6099e3936_s.jpg",
"height_sq": 75,
"width_sq": 75
}
],
"page": 1,
"per_page": 500,
"perpage": 500,
"pages": 1,
"total": "1"
},
"stat": "ok"
}
or
{"stat":"fail", "code":1, "message":"Photoset not found"}
UPDATE:
thanks to all the help i was able to find the error and make a function compatible with IE 7+, Firefox, Chrome, etc..
function flickr_test(){
var apiKey = 'YOUR_API_KEY';
$.ajax({
url: 'http://api.flickr.com/services/rest/',
data: {
method: 'flickr.test.echo',
api_key: apiKey,
format: 'json',
test: 'test string',
jsoncallback: 'jsonFlickrApi'
},
dataType: 'jsonp'
});
}
function jsonFlickrApi(response){
console.log(response.stat);
}
P.S.: the 'test' var is string that i wanted to pass to the callback function
Using the file https://github.com/douglascrockford/JSON-js/blob/master/json2.js you'll have this error: "parsing string: Line: 191 Error: Object doesn't support this property or method". the property or method is valueOf().
I use the solution suggested in JSON2 Error / Conflict with another script
return ((typeof this.valueOf === 'function') ? this.valueOf(): this.toString());
instead of
return this.valueOf();
You can choose a different method when using different browsers:
choose eval in IE6, 7 choose native JSON in IE8 choose new Function in Firefox2, 3 choose eval in Safari4 eval has the same performance as new Function on the whole when you use the other browsers.
Parsing JSON on IE 8 and below have issues. It fails to identify JSON functions.
Download the file https://github.com/douglascrockford/JSON-js/blob/master/json2.js Include it in your application and it should fix the problem.
If you load an iframe IE10 would accept a URL length of 4098.