Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSON Parse Error on Internet Explorer

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

like image 285
Joao Moleiro Avatar asked Dec 27 '22 15:12

Joao Moleiro


2 Answers

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.

like image 152
Naveen Avatar answered Jan 06 '23 09:01

Naveen


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.

like image 35
Pir Abdul Avatar answered Jan 06 '23 08:01

Pir Abdul