如何使用JavaScript检索多个JSON文件?

时间:2012-05-28 16:38:36

标签: javascript ajax

我有一个从服务器接收json的Web应用程序。我使用的是这段代码:

var http_request = new XMLHttpRequest();
var url = "url where I have the json"
http_request.onreadystatechange = handle_json;
http_request.open("GET", url, true);
http_request.send(null);
var obj;

function handle_json() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
     var json_data = http_request.responseText; 
     obj = eval("(" + json_data + ")");
     processData(obj);

} else {
  alert("A problem ocurred");
}
http_request = null;

} }

但是现在我想从两个网址接收json并显示信息。我怎么能用JavaScript做到这一点?我知道eval不适合做,但这只是一个原型。

非常感谢你! :)

2 个答案:

答案 0 :(得分:2)

正如其他人所说,你只需提出2个请求。为了重用你已编写的代码,你可以定义一个函数来获取带有url参数的json。像这样:

function getJson(url, callback){
  function handle_json() {
    if (http_request.readyState == 4) {
      if (http_request.status == 200) {
        var json_data = http_request.responseText;
        var parser = (JSON && typeof JSON.parse == 'function') ? JSON.parse : eval;
        var obj = parser("(" + json_data + ")");
        callback(obj);
      } else {
        alert("A problem ocurred");
      }
      http_request = null;
    }
  }

  var http_request = new XMLHttpRequest();
  http_request.onreadystatechange = handle_json;
  http_request.open("GET", url, true);
  http_request.send(null);
}

我将调用替换为eval,其中一些逻辑会调用JSON.parse(如果存在),否则将使用eval。使用此功能可以通过多次调用来发出多个请求,如下所示:

getJson("some url", processData);
getJson("some other url", processData");

如果您想以不同的方式处理来自不同网址的数据,只需定义与processData类似的其他功能,然后将其传递出来,例如getJson("some crazy url", processCrazyData);

使用像jQuery之类的框架会减少你必须编写的代码量,但是这个解决方案应该使用基本的javascript来完成。

答案 1 :(得分:-1)

最简单的方法是将其放入函数中。

function getJson(url) {
    //Remove the var url="string" line
    //Rest of code
}

function handleJson() {
    //Other code
}

或者,您可以使用jQuery,在这种情况下,您的代码将是:

$.getJSON('url goes in here',function(data){
    processData(data);
});

只要你想抓住一个页面就可以使用它。