使用纯JS获取Json数组

时间:2013-12-23 12:05:14

标签: javascript arrays json jsp

我想在不使用JQuery的情况下从跨域获取JSON数组。来自跨域的数据如下:

{
      "transactionid": "LBS_48550801",
      "status": 0,
      "countrylist": 
    [
   { "id": 1, "name": "France", "latitude": 37.00039, "longitude": 35.31411, "extent": { "minlatitude": 36.53888499, "minlongitude": 34.76786904, "maxlatitude": 38.37851496, "maxlongitude": 36.40534884 }},
   { "id": 2, "name": "Germany", "latitude": 37.76454, "longitude": 38.27645, "extent": { "minlatitude": 37.40771898, "minlongitude": 37.43326512, "maxlatitude": 38.21203404, "maxlongitude": 39.24767592 } },
   //... .... .... 
   //... .... .... 
   //... .... .... 
   { "id": 98, "name": "Belgium", "latitude": 38.75754, "longitude": 30.5387, "extent": { "minlatitude": 37.78126803, "minlongitude": 29.68963308, "maxlatitude": 39.27915099, "maxlongitude": 31.71549708 } },
   { "id": 99, "name": "England", "latitude": 39.71812, "longitude": 43.03345, "extent": { "minlatitude": 38.96877501, "minlongitude": 42.28340184, "maxlatitude": 40.031208, "maxlongitude": 44.61092892 } },
    ]
}

获取数据后,我需要解析它以获得“countrylist”列表。

我搜索了解决这个问题但是这些例子都是用JQuery编写的。我不想用它。如您所见,我在输入中有transactionid,status参数。因此,在导入数据后,我需要解析它以获取countrylist数组。我知道如何解析它,但我无法从服务中获取整个数据。

我需要通过Javascript方法获取数据。服务器支持很好地检索数据。

要采取的步骤是:

1-获取整个数据(这是我遇到的地方)

2-将其解析为Json对象(我​​知道如何解析数据)

如何在不使用任何JQuery或其他准备好的库的情况下获取整个数据?

4 个答案:

答案 0 :(得分:11)

你可以使用XMLHttpRequest for ajax和JSON.parse来解析json:)

var xmlhttp = new XMLHttpRequest();
xmlhttp.open('GET', '//example.org', true);
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
        if(xmlhttp.status == 200) {
            var obj = JSON.parse(xmlhttp.responseText);
            var countryList = obj.countrylist;
         }
    }
};
xmlhttp.send(null);

你永远不应该使用eval!伊娃是邪恶的!您可以在mdn

上阅读相关内容

<强> UPD:

如果没有CORS标头,则可以使用JSONP。只需将&callback=getJSONP添加到您的网址即可。在jsfiddle上试试:http://jsfiddle.net/VmBF7/3/

答案 1 :(得分:1)

由于您的操作涉及跨域请求,我建议您使用jsonp请求。

this question有你想要的。

答案 2 :(得分:0)

您是否可以尝试将数据下载到隐藏的iframe,然后解析其document.body的内容?

答案 3 :(得分:0)

在我的情况下,由于服务器需要ajax请求,或者它会给你404(以防止csrf),所以根据接受的答案,你需要一个额外的行来完成这样的getJSON ajax版本:

<script type="application/javascript">
    var request = new XMLHttpRequest();
    request.open('GET', '/your/url', true);
    // this following line is needed to tell the server this is a ajax request
    request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    request.onload = function () {
    if (this.status >= 200 && this.status < 400) {
            var json = JSON.parse(this.response);
            // this is where you can do something with the json response
        }
    };
    request.send();
    });
</script>