XML / Javascript для определения версии браузера - PullRequest
1 голос
/ 14 марта 2012

Я создал файл XML и пытался получить к нему доступ через мой веб-браузер. Когда я использовал IE, скрипт работал очень хорошо, и все было в порядке, но когда я пытался открыть его в других браузерах, он не работал. После исследований я узнал, что именно из содержимого ActiveX я копирую в первую строку моего JavaScript, который связан с Microsoft.
Вот почему я нашел другой код, который должен автоматически проверять характер браузера:

<script type="text/javascript">
    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", "emp.xml", false);
    xmlhttp.send();
    xmlDoc = xmlhttp.responseXML;

    //function loadXML(xmlFile)
    //{
    //xmlDoc.async="false";
    //xmlDoc.onreadystatechange=verify;
    //xmlDoc.load(xmlFile);
    //xmlObj=xmlDoc.documentElement;
    //}

На самом деле, для загрузки XML-файла достаточно только двух последних строк функции. Предыдущие две строки написаны, чтобы гарантировать, что функции JavaScript, которые мы можем использовать позже для манипулирования данными файла XML, не выполняют никаких функций для неинициализированного объекта. Таким образом вызывается функция * verify () *.

<?php
//function verify()/   
    //{
      // 0 Object is not initialized
      // 1 Loading object is loading data
      // 2 Loaded object has loaded data
      // 3 Data from object can be worked with
      // 4 Object completely initialized
      //if (xmlDoc.readyState != 4)
    //  {
        // return false;
      //}
    //}
?>

loadXML('emp.xml');
alert(xmlDoc.childNodes(0).firstChild.text);
alert(xmlDoc.childNodes(3).childNodes(1).firstChild.text);  

Я получаю сообщение об ошибке во время выполнения JScript отказано ... что делать?

МОЙ НОВЫЙ КОД:

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","http://www.multimediaprof.com/test/emp.xml",true);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML; 
alert(xmlDoc.childNodes[1].firstChild.text);
</script>
</head>
</html>

Является ли JQUERY ответом, как мне его реализовать?

Ответы [ 2 ]

1 голос
/ 14 марта 2012
<html>

    <body>
        <script type="text/javascript">
            if (window.XMLHttpRequest) {
                xhttp = new XMLHttpRequest();
            } else // for older IE 5/6
            {
                xhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xhttp.open("GET", "/Users/kart2006/Desktop/emp.xml", false);
            xhttp.send("");
            xmlDoc = xhttp.responseXML;

            document.write(xmlDoc.documentElement.nodeName + " loaded");
            var str = xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
            alert(str);
        </script>
    </body>

</html>

Файл XML:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- Edited by XMLSpy® -->
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>

    <body>Don't forget me this weekend!</body>
</note>

Помните, я загрузил файл emp.xml в Mac. В Windows 'File: //'

enter image description hereenter image description here

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

Проблема в том, что вы пытаетесь получить доступ к файлу на вашем компьютере по протоколу file://. Это угроза безопасности, и большинство браузеров не допускают ее.

Решением этой проблемы является размещение файлов на сервере, локальном или в сети.

Если вы используете Google Chrome, вы можете запустить его с флагом --allow-file-access-from-files, чтобы он работал.

РЕДАКТИРОВАТЬ: Я думаю, у вас есть синтаксическая ошибка здесь:

alert(xmlDoc.childNodes(0).firstChild.text);

Объект childNodes является массивом, а не функцией. Таким образом, следует использовать квадратные скобки [], а не скобки ().

EDIT2: если вы используете jQuery, синтаксис будет следующим:

$.get("file.xml", function(data){
    //Your data is accessible through the data variable here!
    console.log("Data Loaded: " + data);
});

Дополнительная документация: http://api.jquery.com/jQuery.get/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...