2014-01-21 4 views
0

Я пытаюсь проанализировать некоторые XML, хранящиеся в сети, а затем сохранить каждый родительский узел и его дочерние элементы через PHP.Многомерный массив jQuery/AJAX

В качестве теста я создал немного базового XML, так как он очень длинный.
У меня есть немного XML, с которым я пытаюсь достичь основ.

<result> 
    <name>Person1</name> 
    <date>2002-05-16</date>   
</result> 
<result> 
    <name>Person2</name> 
    <date>2012-11-06</date> 
</result> 

Я хочу, чтобы отобразить каждый результат отдельно в следующем HTML:

<body> 
    <p>XML Split</p> 
    <div id="contents"></div> 
     <div id="scroll"><input type="button" id="next" Value=" next in array "/> 
     <input type="button" id="previous" Value=" previous in array "/></div> 
     <div id="save"><input type="button" id="one" Value=" Save xml "/> 
     <input type="button" id="all" Value=" Save all xml "/></div> 
    <p>XML Split ended</p> 
</body> 

Для этого я использую следующие JQuery:

$(document).ready(function() { 

$.ajax({ 
    type: "GET", 
    url: "sampleContent.xml", 
    dataType: "xml", 
    data: ({'name': name, 'date': date}), 
    success: function(xml) { 
     parseXml(xml); 
     append(); 
    } 
}); 
}); 

var tmpName; 
var tmpDate; 
var results = []; 

function parseXml(xml) { 

$(xml).find('result').each(function() { 

    tmpName = $(this).find('name').text(); 
    tmpDate = $(this).find('date').text(); 
    output = $(this).val(); 
    if (output != ''){ 
     obj = {}; 
     obj.name = name; 
     obj.date = date; 
     obj.output = output; 
     results.push(obj); 
    } 
}); 
} 

function append() { 

$(results).each(function() { 

    $('#contents').append('<div id="record"><div class="name">' + 
      tmpName + '</div><div class="date">' + 
      tmpDate + '</div></div>'); 
}); 
} 

Я изо всех сил, чтобы получить XML данные для отображения при попытке создания массива. Мне также необходимо изменить некоторые переменные, которые используются в массиве, такие как дата из года-месяца-дня -> день-месяц-год.

Я не уверен, как и почему это происходит неправильно, поэтому были бы признательны за любые предложения по созданию необходимого массива. В качестве примера я пытаюсь использовать how to create multidimensional array/object in jquery and pass via AJAX post, но все еще не так.

Любые предложения приветствуются.

Благодаря

Dan

+0

В вашем файле 'Append()' функция, используйте значение из вашего массива вместо '' tmpName' и tmpDate' – techfoobar

ответ

0

В вашей append() функции, используйте значение из вашего массива вместо использования tmpName и tmpDate

$(results).each(function(i) { 
    $('#contents').append('<div id="record"><div class="name">' + 
      results[i].name + '</div><div class="date">' + 
      results[i].date + '</div></div>'); 
}); 
+0

благодарит за Qu ick ответ, я изменил ваше предложение, но я все равно не получаю никакого результата. – PartTimeNinja

0

Есть несколько вещей,

  1. It кажется result является т корневой уровень, find() находит только потомков
  2. глобальные переменные будут изменяться в цикле, и равное последнее значение после цикла
  3. if (output != ''){... никогда не будет так, как result элементы не имеют значения

-

$(document).ready(function() { 
    $.ajax({ 
     type: "GET", 
     url: "sampleContent.xml", 
     dataType: "xml", 
     data: { 
      name : name, 
      date : date 
     } 
    }).done(function(xml) { 
     $('<div />').append(xml).find('result').each(function() { 
      var record = $('<div />', { 
        id : 'record' 
       }), 
       name = $('<div />', { 
        'class' : 'name', 
        html : $(this).find('name').text() 
       }), 
       date = $('<div />', { 
        'class' : 'date', 
        html : $(this).find('date').text() 
       }); 

      $('#contents').append(record.append(name, date)); 
     }); 
    }); 
}); 
+0

спасибо за ответ, может быть, еще немного запутался, хотя, должно быть, это полная переписывание того, что я сделал? Я попытался скопировать все это и попытался заменить мои функции для parseXml() и append() с помощью новой функции для .done. Я все еще не получаю никакой информации. Что касается 'if (output! =' ') {... никогда не будет истинным, так как элементы результата не имеют значения', я ошибаюсь в попытке .push имя и дата объектов в массив для результатов? Поэтому создание массива obj называется результатом? – PartTimeNinja

+0

@PartTimeNinja - 'val()' получает значение, как в '', а '' не имеет значения, поэтому 'val()' всегда возвращает пустую строку.Вы не ошибаетесь в создании массива, но выполняете итерацию для создания массива, тогда вы повторяете использование массива, когда вы можете сразу использовать значения сразу, массив не нужен. Вы установили dataType в 'xml', поэтому вам не нужно' $ .parseXML', jQuery делает это для вас, а 'done' - это то же самое, что и' success', поэтому это, надеюсь, заменит код, который вы иметь. Попробуйте запустить консоль 'xml' в первой строке внутри' done'? – adeneo

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