2015-07-15 2 views
1

я назвал функцию Ajax, которые собирают данные из файла XML, отформатированный как этотXML не очень хорошо сформированный в JQuery

<?xml version="1.0" encoding="utf-8"?> 
<values>  
    <value date="2015-07-12">37.170</value> 
    <value date="2015-07-13">7.190</value> 
    <value date="2015-07-12">37.170</value> 
    <value date="2015-07-12">3.210</value> 
    <value date="2015-07-12">37.20</value> 
</values> 

Когда я получаю ответ от пульта он говорит не хорошо сформированную: 1:80

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

 var data = []; 
    $.ajax({ 
     url: 'test.xml', // name of file you want to parse 
     dataType: "xml", // type of file you are trying to read 
     success: parse, // name of the function to call upon success 
     async: false, 
     error: function(xhr, status, error) { 
       alert(xhr.responseText); 
       console.log("readyState: " + xhr.readyState); 
       console.log("responseText: "+ xhr.responseText); 
       console.log("status: " + xhr.status); 
       console.log("text status: " + textStatus); 
       console.log("error: " + err); 
     } 
    }); 

    function parse(xml) { 
     var items = jQuery(xml).find("values"); 
     var data = []; 
     var values = $(items).text(); 
     $(document).find("Values").each(function() { 
      $(this).find("value").each(function() { data.push($this.text);}); 
     }); 
     console.log(data.length); 
    } 

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

+0

Что вы делаете с xml, результатом которого является это сообщение об ошибке? –

+0

Я хочу поместить все значения в массив javascript, который будет использоваться позже на веб-сайте. Мне нужно сохранить их в массиве, чтобы я мог сделать математику на них последним и показать эти вычисления. – Jay

+0

Можете ли вы разместить свой аякс-код тоже, пожалуйста! –

ответ

1

EDIT!

Fiddle обновляется.

http://jsfiddle.net/b62tx8Ln/1/

Нет необходимости обрабатывать данные с ParseXML.

Эрик Филлипс, вероятно, прав о двойном разборе. В любом случае, это должно сработать.

Обратите внимание на использование ECHO в скрипке ..... просто для имитации локального xml-файла.

$.ajax({ 
     url: 'test.xml', // name of file you want to parse 
     dataType: "xml", // type of file you are trying to read 
     success: parse, // name of the function to call upon success 
     async: false, 
     error: function(xhr, status, error) { 
      alert("error"); 
     } 
    }); 

    function parse(xmldata) { 
     $(xmldata).find("value").each(function(){ 
      alert($(this).text()); 
     }); 
    } 
+0

С помощью этой функции вам нужно использовать строку xml, потому что мой xml динамически генерируется каждый час? – Jay

+0

Нет, строка 'xml' будет равна тексту ответа/xml вызова ajax. – georgiaboy82

+0

при использовании имени файла он будет отличаться от вызова обычного файла в функции $ .parseXML (test.xml). Когда я называю это так, ничего не происходит – Jay

1

Возможно, вы пытаетесь разобрать его дважды, в документации:

The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string).

Таким образом, я воображая, что это то, что вы ищете:

function parse(xml) { 
    //var items = jQuery(xml).find("values"); 
    var items = xml.find("values"); 
    var data = []; 
    var values = $(items).text(); 
    $(document).find("Values").each(function() { 
    $(this).find("value").each(function() { data.push($this.text);}); 
    }); 
    console.log(data.length); 
} 
+0

. Я больше не получаю неправильную ошибку, но получаю эту ошибку TypeError: xml.find не является функцией test.html: 28: 23. Я посмотрел, где это было и не понял, как работает функция, но теперь она не определена. – Jay

0

Для кого в противном случае проблема с анализом не-правильно сформированных (самозакрывающихся тегов) xml в IE, $(xmlthing).find('nodename').each... работает, тогда как IE будет анализировать $(xmlthing).children('nodename').each... (что отлично в FF и Chrome), как вложенные.

То есть:

<thing /> <thing /> <thing />

будет 3 вещи в FF/Chrome, но один в IE, если вы используете $ (узел) .children (вещь)

$ (узел). find (вещь) даст вам 3 вещи во всех браузерах. Спасибо @Steen

Смежные вопросы