ie浏览器上出现JSON解析错误

JSON Parse Error on Internet Explorer

本文关键字:错误 JSON 浏览器 ie      更新时间:2023-09-26

我使用jscript从Flickr检索JSON数据。在除IE以外的所有浏览器中都能100%工作。我使用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中,函数返回的语法错误在var data = JSON.parse(xdr.responseText);但错误是随机的,它在显示错误之前检索随机数量的照片..

我已经检查了所有涉及的变量,一切都返回OK。

我使用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"}

更新:感谢所有的帮助,我能够找到错误,并使一个功能兼容ie7 +, 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);
}  

注:: 'test' var是字符串,我想传递给回调函数

在ie8及以下浏览器上解析JSON有问题。它无法识别JSON函数。

下载文件https://github.com/douglascrockford/JSON-js/blob/master/json2.js将其包含在应用程序中,应该可以解决问题。

使用不同的浏览器可以选择不同的方法:

在IE6, 7中选择eval在IE8中选择原生JSON在firefox中选择new Function 2, 3在Safari4中选择eval当您使用其他浏览器时,eval的总体性能与new Function相同。

使用文件https://github.com/douglascrockford/JSON-js/blob/master/json2.js你会看到这样的错误:"解析字符串:Line: 191错误:对象不支持此属性或方法"。属性或方法为valueOf()。

我使用JSON2错误/与另一个脚本冲突中建议的解决方案

返回(typeof this)。valueOf === 'function') ?this.valueOf (): this.toString ());
而不是
返回this.valueOf ();