Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Достать данные из ответа сервера. (https://javascript.ru/forum/jquery/42248-dostat-dannye-iz-otveta-servera.html)

Dozentos 18.10.2013 20:33

Достать данные из ответа сервера.
 
Сервер возвращает строку вида: "filename1,filename2,filename3 ...". (Проверено - возвращает!)
Нужно эту строку преобразовать в массив и сделать его доступным для использования в других функциях.

Написал функцию:
window.getFiles = function(){
	var files = new Array;
	$.ajax({url: 'php_get_files.php',
			type: 'get',
			dataType: 'text',
			success: function(text){
				files = text.split(",");
			}
	});
	return files;
}


Но при попытке вывести элемент массива на странице:

var file_list = new Array;
file_list = getFiles();
var file = file_list[1];
var image = "<b style='color: #FFF'>"+file+"</b>";
$('#some_element').html(image);


Выдает undefined.

Подскажите, пожалуйста, где я не прав???

BETEPAH 18.10.2013 21:56

Цитата:

Сообщение от Dozentos
Подскажите, пожалуйста, где я не прав???

в 10й строчке. Вы возвращаете из функции то, чего еще не получили от сервера
Ну и непонятно, что с переменной image делается дальше
window.getFiles = function(){
	var files = new Array;
	$.ajax({url: 'php_get_files.php',
			type: 'get',
			dataType: 'text',
			success: function(text){
				$('#some_element').html("<b style='color: #FFF'>" + text.split(",")[1] + "</b>");
			}
	});
}

Dozentos 18.10.2013 23:55

BETEPAH,
Я там неверно переменную указал, сейчас уже поправил.
Ваш вариант понятен. Если бы нужно было вставить один из элементов массива - оно бы так и проще. Но проблема в том, что нужен весь массив, доступный в других функциях
Попытка сделать так:
window.getImg = function(){
	var images = new Array;
	$.ajax({url: 'php_slider_2.php',
			type: 'get',
			dataType: 'text',
			success: function(text){
				images = text.split(",");
				return images;
			}
	});
}

К успеху также не привела, хотя так:
window.getImg = function(){
	var images = new Array;
	$.ajax({url: 'php_slider_2.php',
			type: 'get',
			dataType: 'text',
			success: function(text){
				images = text.split(",");
				alert(images[1]);
			}
	});
}
getImg();

выдало содержимое ячейки..?

Первую ошибку понял (должен был сам догадаться). Но теперь ничего не понимаю???

danik.js 19.10.2013 06:53

Цитата:

Сообщение от Dozentos
success: function(text){
                images = text.split(",");
                return images;
            }

Функция success вернет результат именно туда, откуда она была вызвана. А теперь вопрос: откуда была вызвана функция success?

Цитата:

Сообщение от Dozentos
Но теперь ничего не понимаю???

Вы не понимаете сущность асинхронности.

BETEPAH 19.10.2013 10:25

Цитата:

Сообщение от Dozentos
Но проблема в том, что нужен весь массив, доступный в других функциях

мне бы ваши проблемы. Попробуйте как-то так:
window.arr = [];
window.getFiles = function(){
	var files = new Array;
	$.ajax({url: 'php_get_files.php',
			type: 'get',
			dataType: 'text',
			success: function(text){
				arr.push("<b style='color: #FFF'>" + text.split(",")[1] + "</b>");
			}
	});
}

Dozentos 19.10.2013 15:18

Что-то я вчера вечером затупил... Очевидно же - объявить переменную на глобальном уровне, а переопределить уже внутри функции...
Честно говоря я нашёл другой способ решения моей проблемы. Вовсе без создания массива.
В любом случае, спасибо.


Часовой пояс GMT +3, время: 18:17.