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;

} }

しかし、今は 2 つの 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 に答える