0

Ajax 呼び出しを行う Web アプリケーションがあり、XML 構成ファイルで ajax 呼び出しに使用するサーバー ドメイン名を設定したいと考えています。javascriptでxmlファイルを解析する方法を示すこのチュートリアルを見ました。しかし、問題は、xml ファイルを解析するために Ajax 呼び出しを行う必要があることです。そのためには、サーバー ドメイン名を知る必要があります (既に xml からフェッチしようとしています)。

では、XML ファイルにサーバー名を設定し、それを使用して ajax 呼び出しを行うにはどうすればよいでしょうか? javascript ファイル自体の外部でサーバー名を構成できる他の方法はありますか?


編集:

このようなことを行うことはできますか (サーバー名を設定する必要はまったくなく、構成ファイルも必要ありません):

 function getMetricNotifications()
{    
 var xmlhttp;
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.open("GET","/rest/general/notifications/metrics",true);
    xmlhttp.send();
    var response = JSON.parse(xmlhttp.responseText);
    return response;
}

の URL の先頭に あるドメイン名localhost:8080(ローカル) または(サーバー上) に言及せずにhttp://mysite.com:8080xmlhttp.open("GET","/rest/general/notifications/metrics",true);

uncaught syntaxerror unexpected end of input試してみたところ、最後の行の前に: が表示されました。何かご意見は?


2回目の編集:

function getMetricNotifications(){   
 var xmlhttp;
 var response = '';
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
          {
             response = JSON.parse(xmlhttp.responseText);
             return response;
          }
      };
    xmlhttp.open("GET","/rest/general/notifications/metrics",true);
    xmlhttp.send(); 
}

現在、この関数を呼び出して結果を出力すると、「未定義」と出力されますが、ブラウザーで残りのリソースに直接アクセスすると、正しい JSON 応答が得られます。応答が得られないのはなぜですか?

4

1 に答える 1

1

実行するバックエンド テクノロジによって異なります。サーバー側で XML ファイルを解析し、その出力にサーバー名を挿入する必要があります。

PHPでは、次のようなことができます

<html>
<head><!-- rest of head -->
<script>
<?php $xml = simplexml_load_file('cfg.xml'); ?>
var server_name = <?= json_encode($xml->servername) ?>
</script>

次にserver_name、JavaScript コードを使用できます。

編集を追加:

はい、ほとんどの場合、これが推奨される URL 形式です。

表示されているエラーは、JSON 入力の形式が正しくないか不完全であることが原因である可能性があります。

実行中のリクエストは非同期であるため、データが利用可能/ダウンロードされるまで待つ必要があります。呼び出しxhr.responseText直後は空です。xhr.send()要求が 4 (完了) の準備完了状態になるまで待ちます。

// ...
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4) {
    var data = JSON.parse(xhr.responseText);
    // ... do something with data ...
  }
};
xhr.send(null);

2 番目の編集を追加します。

次のような同期的な方法で関数を使用すると思います

var data = getMetricNotifications();

データを非同期で取得している場合は、これを行うことはできません。コールバック関数の概念に慣れ、代わりにこれを行う必要があります。

getMetricNotifications(function (data) {
  // work with the received data
});

データを返す代わりに、次のようにコールバック関数に渡します。

var getMetricNotifications = function (callback) {
  // ... do the call ...
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && ...) {
      var data = JSON.parse(xhr.responseText);
      callback(data);
    }
  };
  // ... 
};
于 2012-09-17T11:13:34.600 に答える