Как возвратить массив из jQuery ajax, успех функционируют правильно? [дубликат]

Этот вопрос уже имеет ответ здесь:

TheObject = {

    getArray: function(){
        var groups = new Array;
        $.ajax({
              type: "POST",
              url: "link.php",
              success: function (data){
                  var counter = 0;
                  $('g',data).each(function(){    
                      var group_name = $(this).find("name").text();
                      var group_id = $(this).find("id").text();
                      var group = {
                         id: group_id,
                         name: group_name
                      }
                      groups[counter] = group;
                      counter++;
                  });
                  return groups;
              }
         });
     }

}

И когда я пытаюсь назвать этот метод:

var a = TheObject.getArray();
alert(a);

Это возвращается 'неопределенный'. Я не могу выяснить, где проблема. Массив создается в функции успеха, но I'am, неспособном возвратить его правильно.Спасибо за помощь!

12
задан ecu 3 February 2010 в 20:25
поделиться

2 ответа

В вашем коде вы ищете группы с использованием процедурного кодирования после того, как был сделан вызов ajax. Основная проблема заключается в том, что вы ищете группы до завершения вызова ajax.

Другая проблема заключается в том, что вы возвращаете группы функции success () , но функция TheObject.getArray () ничего не возвращает.

Итак, вам нужно включить обратный вызов в функцию ajax следующим образом:

TheObject = {
    getArray: function(callback) {
        var groups = new Array;
        $.ajax({
              type: "POST",
              url: "link.php",
              success: function (data){
                  var counter = 0;
                  $('g',data).each(function(){    
                      var group_name = $(this).find("name").text();
                      var group_id = $(this).find("id").text();
                      var group = {
                         id: group_id,
                         name: group_name
                      }
                      groups[counter] = group;
                      counter++;
                  });
                  callback.call(this,groups);
              }
         });
     }
}

TheObject.getArray(function(a) {
    // this code runs when the ajax call is complete
    alert(a);
});
16
ответ дан 2 December 2019 в 07:21
поделиться

Используйте push в массиве. Также вы хотите создать тип с именем Group, а затем создать новую группу в цикле, а затем вставить ее в массив.

0
ответ дан 2 December 2019 в 07:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: