JQuery / AJAX многомерный массив

0

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

В качестве теста я создал немного базового 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 при попытке создания массива. Мне также потребуется изменить некоторые переменные, которые используются в массиве, такие как дата из year- месяц-день → день-месяц-год.

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

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

благодаря

Дэн

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

2 ответа

0

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

  1. Кажется, что 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! =' ') {... никогда не будет истинным, поскольку элементы результата не имеют значения', я ошибаюсь, пытаясь вставить объекты имени и даты в массив для результатов? Поэтому создание массива obj, называемого Results?
  • 0
    @PartTimeNinja - val() получает значение, как в <input value="something" /> , а <result> не имеет значения, поэтому val() всегда будет возвращать пустую строку. Вы не ошиблись в создании массива, но вы итерируете, чтобы создать массив, затем вы итерируете, чтобы использовать массив, когда вы можете просто использовать значения сразу, массив на самом деле не нужен. Вы установили для dataType значение xml , поэтому вам не нужен $.parseXML , jQuery сделает это за вас, и done будет done же, как и success , так что, надеюсь, это должно заменить ваш код. Попробуйте консольный журнал xml на первой строке внутри done ?
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
    спасибо за быстрый ответ, я исправил, как показывает ваше предложение, но я все еще не получаю никакой информации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню