Очень странно: почему порядок моих объектов портится после вызова ajax, даже если я ничего не изменил? - PullRequest
0 голосов
/ 21 сентября 2011

У меня два вложенных ajax-вызова на сервер.

При первом вызове ajax сервер возвращает мне XML, который содержит упорядоченный список объектов, сервер упорядочивает список по дате в порядке возрастания. Здесь я получаю объекты в порядке возрастания даты.

В функции успеха 2-го вызова ajax я просто выводил даты объектов, но мои объекты неожиданно удивительно не в порядке возрастания даты , почему?

Мой код выглядит следующим образом (пожалуйста, не смущайтесь из-за моих двух вызовов ajax, я объяснил их после кода):

$.ajax({
    type : "GET",
    url : MY_URL_1,
    dataType : "xml",
    success : function(xml) {
            $(xml).find("DOCUMENT").each(function() {
               var eachXMLdata = $(this);
               var date = eachXMLdata.children("DATE").text();

               // I successfully get the date in ascending order
               console.log('date:'+date);



               $.ajax({
               type : "GET",
               url : MY_URL_2,
               dataType : "xml",
               success : function(xml) {

                         var date = eachXMLdata.children("DATE").text();

                         //I have not change anything of eachXMLdata, 
                         //why the order of the dates get messed up here
                         console.log('date:'+date);


                    }//end of 2nd ajax success function
                });// end of 2nd ajax call

            });//end of "each" function
        }//end of 1st ajax success function
     });//end of 1st ajax call

Как вы видели выше, есть два вложенных ajax-вызова, то есть 2-й ajax-вызов находится внутри функции успеха 1-го ajax-вызова (и в "каждой" функции).

В ajax-вызове 1st консоль выводит дату каждого объекта, которая правильно отображается в порядке возрастания .

Странная проблема возникает после того, как я снова вывел дату объектов в функции успеха вызова ajax 2nd , даты больше не в порядке возрастания, почему? Я ничего не изменил в eachXMLdata, почему два консольных вывода дают мне разный порядок дат? и как от него избавиться ???

Ответы [ 2 ]

0 голосов
/ 22 сентября 2011

Я наконец-то избавился от проблемы, установив "async: false" для внутреннего вызова Ajax. Это коренная причина.

0 голосов
/ 21 сентября 2011

Это jsfiddle демо работает отлично. Вы используете функцию text()?

var xmlstr = "<DOCUMENT>";
for (var i = 0; i < 10; i++) {
    xmlstr += "<DATE>" + i + "</DATE>";
}
xmlstr += "</DOCUMENT>";

$.ajax({
    type: "POST",
    url: "/echo/xml/",
    data: {
        "xml": xmlstr
    },
    dataType: "xml",
    success: function(xml) {
        $(xml).find("DOCUMENT").each(function() {
            var eachXMLdata = $(this);

            eachXMLdata.children("DATE").each(function() {
                // I successfully get the date in ascending order
                $(document.body).append($("<div/>").text('1date:' + this.firstChild.nodeValue));
            });

            $.ajax({
                type: "POST",
                url: "/echo/xml/",
                data: {
                    "xml": xmlstr
                },
                dataType: "xml",
                success: function(xml) {

                    eachXMLdata.children("DATE").each(function() {
                        //I have not change anything of eachXMLdata,
                        //why the order of the dates get messed up here
                        $(document.body).append($("<div/>").text('2date:' + this.firstChild.nodeValue));
                    });

                } //end of 2nd ajax success function
            }); // end of 2nd ajax call
        }); //end of "each" function
    } //end of 1st ajax success function
}); //end of 1st ajax call
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...