XML с использованием Javascript в Google Chrome - PullRequest
0 голосов
/ 15 марта 2012

Hy all,

Я использую код, который проходит через XML-файл и показывает мне данные. Этот код прекрасно работает в IE, Firefox и Opera. Теперь я хотел бы узнать, какнастроить его для работы в Chrome ..

Используя navigator.appName == "Microsoft Internet Explorer" и navigator.appName == "Netscape", я смог проверить подлинность используемого браузера и использовать ли объекты ActiveX или httpRequest.

Имея в виду, при предупреждении navigator.appName на Chrome, Firefox и Opera, я получаю Netscape.

Это полная версия моего кода:

    <html>
    <body>
    <script type="text/javascript">

    alert(navigator.appName);
    if (navigator.appName == "Microsoft Internet Explorer") {
        xhttp = new ActiveXObject("Microsoft.XMLHTTP");
        xhttp.open("GET", "http://www.multimediaprof.com/test/emp2.xml", false);
    }
    else if (navigator.appName == "Netscape") {

        xhttp = new XMLHttpRequest();
        alert("step 1");

        xhttp.open("GET", "emp2.xml", false);
    }
    alert("step 2");
    xhttp.send("");
    alert("step 3");
    xmlDoc = xhttp.responseXML;
    alert("step 4");
    alert(xmlDoc);
    document.write(xmlDoc.documentElement.nodeName + " loaded");
    alert("step 5");
    var str = xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
    alert("step 6");
    alert(str);​

</script>
</body>
</html>

Новая полная версиякода, предложенного сейчас:

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">

var xhttp, xmlDoc, str;

if (window.XMLHttpRequest) {
  xhttp = new XMLHttpRequest();
    xhttp.open("GET", "emp2.xml", false);
} else if (window.ActiveXObject) {
  xhttp = new ActiveXObject("Microsoft.XMLHTTP");
   xhttp.open("GET", "http://www.multimediaprof.com/test/emp2.xml", false);
} else {
  alert("Cannot create XmlHttpRequest object");
}
if (xhttp) {
  xhttp.send("");

  if (xhttp.responseXML != null) {
    xmlDoc = xhttp.responseXML;
    str = xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
    alert(str);
  } else {
    alert("Server response was invalid.");
  }
}
</script>
</head>
</html>

1 Ответ

1 голос
/ 15 марта 2012

Только не используйте appName вообще.

var xhttp, xmlDoc, str;

if (window.XMLHttpRequest) {
  xhttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
  xhttp = new ActiveXObject("Microsoft.XMLHTTP");
} else {
  alert("Cannot create XmlHttpRequest object");
}
if (xhttp) {
  xhttp.open("GET", "emp2.xml", false);
  xhttp.send();

  if (xhttp.responseXML != null) {
    xmlDoc = responseXML;
    str = xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
    alert(str);
  } else {
    alert("Server response was invalid.");
  }
}

Примечание:

  • Вы должны объявить все переменные, которые вы используете. Нет никаких причин не объявлять переменную.
  • Вы действительно должны использовать асинхронные запросы. Узнайте, как их использовать. Синхронные запросы плохие и неправильные.
  • Вы никогда не должны использовать document.write().
  • Вы должны всегда проверять вещи, прежде чем использовать их. Например, вы не можете просто использовать xhttp.responseXML, даже не проверив, существует ли он.
    То же самое касается getElementsByTagName("to")[0].childNodes[0].nodeValue. Это может потерпеть неудачу в любое время. Если вы никогда не ожидаете ошибки здесь, по крайней мере, оберните ее в блок try / catch и корректно обработайте непредвиденные ошибки.
  • Есть console.log(). Это намного лучше, чем alert().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...