Ошибка синтаксического анализа JSON в Internet Explorer - PullRequest
2 голосов
/ 13 августа 2011

Я использую jscript для извлечения данных JSON из Flickr. Работает на 100% во всех браузерах, кроме IE.
Я использую jquery для каждой функции, которая вызывает эту конкретную функцию для 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
  }
}

В IE функция return является синтаксической ошибкой в ​​ var data = JSON.parse (xdr.responseText); , но ошибка случайная, она получает случайное количество фотографий, прежде чем показать ошибку ..

Я проверил все переменные, и все возвращается ОК.

Я использую json2.js

ОБНОВЛЕНИЕ:

JSON возможные результаты:

{
    "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"
}

или

{"stat":"fail", "code":1, "message":"Photoset not found"}

UPDATE:
благодаря всей помощи я смог найти ошибку и сделать функцию совместимой с IE 7+, Firefox, Chrome и т. д.

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 .: переменная 'test' - это строка, которую я хотел передать функции обратного вызова

Ответы [ 4 ]

8 голосов
/ 06 ноября 2012

При разборе JSON в IE 8 и ниже возникают проблемы.Не удается определить функции JSON.

Загрузите файл https://github.com/douglascrockford/JSON-js/blob/master/json2.js Включите его в свое приложение, и оно должно решить проблему.

1 голос
/ 13 августа 2011

Вы можете выбрать другой метод при использовании разных браузеров:

выберите eval в IE6, 7 выбрать нативный JSON в IE8 выберите новую функцию в Firefox2, 3 выбрать eval в Safari4 eval имеет ту же производительность, что и новая функция в целом, когда вы используете другие браузеры.

0 голосов
/ 09 марта 2015

Если вы загрузите iframe, IE10 примет длину URL 4098.

0 голосов
/ 03 апреля 2013

Использование файла https://github.com/douglascrockford/JSON-js/blob/master/json2.js у вас будет эта ошибка: msgstr "строка анализа: строка: 191 Ошибка: объект не поддерживает это свойство или метод". свойство или метод это valueOf ().

Я использую решение, предложенное в Ошибка / конфликт JSON2 с другим сценарием

return ((typeof this.valueOf === 'function')? This.valueOf (): this.toString ());
вместо
return this.valueOf ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...