Как правильно вернуть массив из функции успеха 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);
Возвращает "неопределенное". Я не могу понять, где проблема. Массив создается внутри функции успеха, но я не могу его правильно вернуть. Спасибо за вашу помощь!
3 ответа
В вашем коде вы ищете groups
используя процедурное кодирование после вызова ajax. Основная проблема в том, что вы ищете groups
до завершения вызова 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);
});
Очень простая версия примера Дэвида.
TheObject = {
getArray: function(callback) {
$.ajax({
cache: true,
type: "GET",
url: "http://www.domain.com/core/domains.php",
success: function (data){
callback.call(this,data);
}
});
}
}
TheObject.getArray(function(data) {
javascript: console.log(data);
});
Использование push
на массиве. Также вы хотите создать тип с именем Group, а затем создать новую группу в цикле и затем поместить ее в массив.