JSON Parse Error on Internet Explorer

2020-04-16 05:20发布

问题:

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

回答1:

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.



回答2:

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.



回答3:

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();



回答4:

If you load an iframe IE10 would accept a URL length of 4098.