@akula22

Как правильно сделать ретурн массива на javascript, jquery?

function getData()
{
    paper = getPaper();
    alert ( paper.price );   //так не работает
}

function getPaper()
{
	$.post(
        "site/default/getpaper", {
        	id : $('#calc-paper').val()
        },
        function (data) {
        	data = jQuery.parseJSON(data);
        	alert(data.price);  //  это работает
        	return data;
        }
    )
}

Как правильно сделать ретурн этого массива, чтоб в первой функции получить доступ к данным массива
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ответы на вопрос 4
DPechurkin
@DPechurkin
Веб разработчик
не правильно ты понимаешь конструкцию
в данном случае тебе нужно будет возвращать так
function getPaper(){
return $.post(url, data, callback, "json");
}
ошибка твоя в том что ты из функции getPaper() ничего не возвращаешь , а возвращаешь внутри $.post(....) в свою очередь $.post у тебя просто отрабатывает и никому значение не передаёт.
jquery-docs.ru/Ajax/jQuery.post
Ответ написан
Комментировать
werty1001
@werty1001
undefined
Например так:
function getPaper(cb) {
	$.post("site/default/getpaper", {
		id: $('#calc-paper').val()
	},
	function(data) {
		data = jQuery.parseJSON(data);
		cb(data);
	});
}

getPaper(function(data){
	alert(data.price);
});
Ответ написан
Комментировать
Функция $.post не возвращает данные, она загружает страницу.
Внутри этой функции данные доступны. Чтобы сделать и доступными для других функций необходимо сохранить данные в замыкании:
- объявляете переменную Х вне функции $.post
- в функции $.post после получения данных и их обработки сохраняете данные в объявленную переменную Х
- используете переменную другой функцией, которая в "видит" переменную Х

Код не привожу т.к. тут возможны варианты реализации, главное - принцип понять.

Или вариант такой:
function getPaper()
{
var data;
  $.post(
        "site/default/getpaper", {
        	id : $('#calc-paper').val()
        },
        function (res) {
        	data = jQuery.parseJSON(res);
        }
    )
return data;
}
Ответ написан
@akula22 Автор вопроса
Спасибо за ответы, но не работает )
function getPaper()
{
	var result;
	$.post(
        "site/default/getpaper", {
        	id : $('#calc-paper').val()
        },
        function (data) {
        	result = jQuery.parseJSON(data);
        	 alert(result.price);  ТУТ ОНО РАБОТАЕТ
        }
    )
  	alert(result.price);   //  А ЗДЕСЬ УЖЕ НЕТ, 
}

Сейчас что не правильно?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы