[英]How to set the server name as a global variable in javascript from an xml file?
我有一个Web应用程序,该应用程序进行了一些Ajax调用,并且我想在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;
}
在xmlhttp.open("GET","/rest/general/notifications/metrics",true);
URL的开头未提及域名localhost:8080
(本地)或http://mysite.com:8080
(在服务器上) xmlhttp.open("GET","/rest/general/notifications/metrics",true);
我尝试了一下,但得到了: uncaught syntaxerror unexpected end of input
最后一行之前的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响应,但它会打印“ undefined”。 为什么没有得到回应?
这取决于您运行哪种后端技术。 您需要在服务器端解析XML文件,并将服务器名称插入其输出。
在PHP中,您可以执行以下操作
<html>
<head><!-- rest of head -->
<script>
<?php $xml = simplexml_load_file('cfg.xml'); ?>
var server_name = <?= json_encode($xml->servername) ?>
</script>
然后,您可以在JavaScript代码中使用server_name
。
是的,在大多数情况下,这是首选的URL格式。
您看到的错误可能是由JSON输入格式错误/不完整引起的。
您正在执行的请求是异步的,因此您需要等待数据可用/下载。 在xhr.send()
调用之后, xhr.responseText
为空。 等待请求进入就绪状态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);
}
};
// ...
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.