0

我有一个进行一些 Ajax 调用的 Web 应用程序,我想在 XML 配置文件中设置用于 ajax 调用的服务器域名。我看过这个教程,它展示了如何在 javascript 中解析 xml 文件。但问题是我需要进行 Ajax 调用来解析 xml 文件,为此我需要知道服务器域名(我已经在尝试从 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在最后一行之前。有什么想法吗?


第二次编辑:

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

添加第二个编辑:

我想您以同步方式使用该功能,例如

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 回答