0

我有一个从服务器接收 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;

} }

但现在我想从两个 url 接收 json 并显示信息。如何使用 JavaScript 做到这一点?我知道 eval 不是合适的做法,但这只是一个原型。

非常感谢!:)

4

2 回答 2

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

如果您想以不同的方式处理来自不同 url 的数据,只需定义另一个类似的函数processData并将其传递,例如getJson("some crazy url", processCrazyData);

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

于 2012-05-28T17:16:52.303 回答
-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);
});

只要你想抓取一个页面,就使用它。

于 2012-05-28T16:42:05.580 回答