jQuery.Each () испытывает проблемы с итерацией по XML - PullRequest
0 голосов
/ 14 января 2012

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

<xml>
    <team>
        <id>1</id>
        <member>
            <id>37</id>
            <name>Bill</name>
        </member>
        <member>
            <id>45</id>
            <name>John</name>
        </member>
    </team>
    <team>
        <id>2</id>
        <member>
            <id>71</id>
            <name>Kevin</name>
        </member>
    </team>
    <team>
        <id>3</id>
        <member>
            <id>12</id>
            <name>Dave</name>
        </member>
        <member>
            <id>29</id>
            <name>Tom</name>
        </member>
        <member>
            <id>92</id>
            <name>Pete</name>
        </member>
    </team>
</xml>

Для анализа этого XML-файла я использовал следующий код jQuery:

$.get("servlet", { command: "getMembers" }, function(data) {
    var teams = new Array();
    $(data).find("team").each(function() {
        var members = new Array();
        $(this).find("member").each(function() {
            members.push({
                id: $(this).find("id").text(),
                name: $(this).find("name").text()
            });
        });
        teams.push({
            id: $(this).find("id").text(),
            members: members
        });
    });
    console.log(teams);
}, "xml").error(function() { console.log("Error"); });

Проходя через процесс синтаксического анализа XML, я замечаю, что «объект команды», похоже, хранится очень хорошо, и содержит как правильный идентификатор команды, так и полный список участников. Однако второй «командный объект» сломан. Затем я вмешиваюсь, чтобы увидеть, что происходит, когда он хранит этот второй элемент, и замечаю, что, когда он проверяет предполагаемую «команду» на наличие «членов», «this» объект, на который он ссылается, остается объектом «team», но поле teamId пустое, а поле members даже отсутствует. Таким образом, после неудачного добавления этого командного объекта в массив, он прекращает синтаксический анализ, оставляя мне один правильный и один неправильный элемент массива.

Я все еще относительно новичок в веб-программировании приложений, и я знаю, что было бы предпочтительнее использовать объект JSON, а не файл XML, но на данный момент это то, что я придумал , Кроме того, я не совсем уверен, почему этот второй элемент ломается, а первый нет. Если бы мне нужно было сделать предположение, «этот» объект после первого броска броска - это не то, что, я думаю, должен быть вторым. У кого-нибудь есть идеи, как я могу точно выяснить, что происходит, или, возможно, сразу увидеть мою логическую ошибку?

...