Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   возврат значения в функции (https://javascript.ru/forum/dom-window/46602-vozvrat-znacheniya-v-funkcii.html)

imediasun1 16.04.2014 15:18

возврат значения в функции
 
Здравствуйте я вызываю функцию которая прекрасно отрабатывает и в print_r:) есть массив, но нет вывода alert(key+sac), что тут может быть не так?
function get_meta(id){
        $.ajax({
          type: 'POST',
          url: '/admin/get_meta/',
		  dataType: 'json',
          data: {data:id},
		  cache: false,
          success: function(data) {
		  alert(print_r(data));
		  return data;
		
		
          },
          error:  function(xhr, str){
                alert('Возникла ошибка: ' + xhr.responseCode);
            }
        });
		return data;
}
$('#select1').change(function(){
var value = $(this).val();
//получение тайтла
var title=get_meta(value);
 $.each(title, function(key, sac) { 
alert(key+sac)
});
})

devote 16.04.2014 15:20

читайте про то, в чем разница между синхронностью и асинхронностью (запросы делаются асинхронно, код выполняется синхронно)

imediasun1 17.04.2014 09:57

Можете конкретно указать на коде что сделать чтобы получить массив в функции change, я так понял что код выполняется и не может как бы подождать асинхронный запрос и поэтому не приходит ответ от функции get_meta, так?

devote 17.04.2014 10:15

Цитата:

Сообщение от imediasun1
и поэтому не приходит ответ от функции get_meta, так?

да так. Вы можете сделать синхронный запрос добавив опцию asyc: true (что не рекомендуется), а можете переделать свой код что бы он работал асинхронно.

imediasun1 17.04.2014 16:01

а можно ли очередь исполнения поставить в функции change, чтобы js как бы подождал выполнение асинхронного запроса, или я не понимаю этого момента,Уважаемыйdevote,помогите примером как бы вы переделали ее пожалуйста,

jsnb 17.04.2014 16:36

Цитата:

Сообщение от devote (Сообщение 308053)
Вы можете сделать синхронный запрос добавив опцию asyc: true

Наоборот, async: false, оно true по дефолту.

imediasun1 17.04.2014 16:38

А почему не рекомендуется и все таки какой другой метод решения?

jsnb 17.04.2014 16:44

Цитата:

Сообщение от imediasun1 (Сообщение 308100)
А почему не рекомендуется и все таки какой другой метод решения?

Потому что браузер повиснет на время запроса.
Другой метод решения - засунуть код который должен выполняться после выполнения запроса в каллбек (функция, которая прописана в success).


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