JavaScript - AJAX: доступ к XML-файлу с сервера - PullRequest
0 голосов
/ 13 августа 2010

Я пытаюсь получить доступ к XML-файлу с сервера в моем коде JavaScript. У меня есть XML-файл, как это:

-<stream version="1.2">
  -<room id="simulator" time="128168557915">
   -<dimention id=0 x="1.25" y="2.00">
     <m mcu="160" sid="75">
    </dimention>
   </room>
-<room id="simulator" time="128168557928">
   -<dimention id=0 x="1.95" y="1.86">
     <m mcu="160" sid="55">
    </dimention>
   </room>
 </stream>

этот файл генерируется приложением, и я могу получить к нему доступ с URL-адреса (поскольку я использую симулятор для этого приложения, XML доступен с http://localhost:8081/feed/demo) Этот XML-файл обновляется каждые несколько секунд и постоянно растет. У меня есть код javascript, в который я добавил следующий код, чтобы использовать данные из файла XML:

<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","http://localhost:8081/feed/demo",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
document.write("<table border='1'>");
var x=xmlDoc.getElementsByTagName("room");
for (i=0;i<x.length;i++)
  {
  document.write("<tr><td>");
  document.write(xmlDoc.getElementsByTagName("dimention")[i].getAttribute("x"));
  document.write("</td><td>");
  }
document.write("</table>");

</script>

Теперь возникает моя проблема: если у меня есть файл XML, сохраненный на том же диске, что и HTML-страница, и я обращаюсь к нему так: xmlhttp.open ( "GET", "floor.xml", ложь); это работает нормально, но когда я передаю URL, это не так. Что еще я должен делать в случае загрузки XML с URL?

Мой второй вопрос: я хочу использовать текстовые значения, возвращаемые

xmlDoc.getElementsByTagName("dimention")[i].getAttribute("x")

в выражении if, подобном этому:

if (valuereturned = 2.00)
{
  do sth
}

каков наилучший способ сделать это, поскольку возвращаемое значение является текстом.

Мне нужен ответ как можно скорее, и я действительно ценю вашу помощь: -)

Ответы [ 3 ]

0 голосов
/ 13 августа 2010

Теперь возникает моя проблема: если у меня есть файл XML, сохраненный на том же диске, что и HTML-страница, и я адресую его следующим образом: xmlhttp.open ("GET", "floor.xml", false); это работает нормально, но когда я передаю URL, это не так. Что еще я должен сделать в случае загрузки XML с URL?

Ответ: Вас отключает одна и та же функция безопасности домена в браузерах. Вызов Ajax должен относиться к тому же домену, с которого была загружена сама страница.

мой второй вопрос: я хочу использовать текстовые значения, возвращаемые

xmlDoc.getElementsByTagName ( "Dimention") [I] .getAttribute ( "х") в выражении if, подобном этому:

if (valuereturned = 2.00)
  {do sth}

Каков наилучший способ сделать это, поскольку возвращаемое значение является текстом.

Ответ: Прежде всего, вы хотите, чтобы тест на равенство (==) не назначался (=).

Во-вторых, приведение типов может сработать (но вам, возможно, придется изменить операнды):

if (2.00 == valuereturned)
  {do sth}

Но гораздо лучше конвертировать явно:

if (parseFloat(valuereturned) == 2.00)
  {do sth}

Если вы действительно хотите сравнить с 2 (а не с плавающей точкой 2.0), тогда вам будет безопаснее (более надежно) сравнивать целые числа:

if (parseInt(valuereturned) === 2)
  {do sth}

Если вы придерживаетесь чисел с плавающей запятой, вы, вероятно, захотите сделать некоторое округление, поскольку поиск точно совпадающих значений с плавающей запятой обычно не тот, который вы хотите.

0 голосов
/ 13 августа 2010

Попробуйте это быстрое и грязное решение.

  function includeJS(filename, callback, responcedata){
        var page = document.getElementsByTagName('head')[0],
            js = document.createElement('script'),
            url =   "http://query.yahooapis.com/v1/public/yql?q="+
                "select%20*%20from%20xml%20where%20url%3D'"+encodeURIComponent(filename)+
                "'%20and%20columns%3D'question%2Canswer'&format='+responcedata'+&callback=?";

            js.setAttribute('type', 'text/javascript');
            js.setAttribute('src', url);
            page.appendChild(js);
    }

window.onload = includeJS;

Аргументы:

      filename - the url of your xml file.
      responcedata - json or xml
      callback - a function that accepts your responcedata, json returns an object, xml returns xml.

YQL Для получения дополнительной информации.

0 голосов
/ 13 августа 2010

Я знаю, что это утомительный и клише ответ на подобные вопросы, но подумайте над использованием jQuery .

Это делает извлечение данных через AJAX намного приятнее, а такие вещи, как ваш второй вопрос, намногопроще.

Какой код состояния возвращается при попытке доступа по абсолютному URL-адресу?

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