我有一个从服务器接收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不适合做,但这只是一个原型。
非常感谢你! :)
答案 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);
});
只要你想抓住一个页面就可以使用它。