Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   function() {return ' '} (https://javascript.ru/forum/misc/48511-function-%7Breturn-%27-%27%7D.html)

xxnikolayxx 07.07.2014 05:07

function() {return ' '}
 
Доброго времени суток дорогие форумчане.
Осваиваю JS уже давно, но время от времени все равно вылазят непонятные ошибки.
Подскажите, что может быть не так?
Функция возвращает мне undefined, а должна бы строку.
function get_tech_name(id){
    <!-- Получение наименования типа техники -->
    $.ajax({
              type: 'GET',
              url: '/api/get_technique_type_name/',
              data: {id: id},
              success: function(data) {
                  if (data.code == '1'){
                      return data.data;

                  } else {
                      <!-- Ошибка обработки -->
                      return data.response;
                  }

              }
            });
}

А вот если поставить alert вместо return, то все в порядке...
В чем тайна?

P.S.(Строка, приходящая из url = \u0421\u0430\u043c\u043e\u0441\u0432\u0430\u043b)

jsnb 07.07.2014 06:42

У вас функция get_tech_name ничего не возвращает, поэтому и undefined. return у вас стоит в функции-калбеке, которая выполнится когда аякс запрос будет выполнен, а на это требуется время. Аякс запрос выполняется асинхронно, т.е. функция get_tech_name не будет ждать пока выполнится запрос и будет завершена раньше чем будет вызван аяксовый калбек. Так что передавайте данные из калбека куда вам надо.

xxnikolayxx 07.07.2014 06:47

Спасибо.

xxnikolayxx 07.07.2014 17:20

Собственно поправил функцию, чтобы она удовлетворяла требованиям.
function get_tech_name(id){
    <!-- Получение наименования типа техники -->
    var response = 'l';
    $.ajax({
              type: 'GET',
              url: '/api/get_technique_type_name/',
              async: false,
              data: ({id: id}),
              success: function(data) {
                  if (data.code == '1'){
                      response = data.data;

                  } else {
                      <!-- Ошибка отправки -->
                      response = data.response;
                  }

              }
            });
    return response;
}

jsnb 07.07.2014 18:44

Цитата:

Сообщение от xxnikolayxx (Сообщение 319837)
Собственно поправил функцию, чтобы она удовлетворяла требованиям.

При синхронном запросе на время выполнения запроса страница повиснет, поэтому это не лучшее решение. Что мешает запускать из калбека код, который должен работать с результатом запроса?

P.S. Комментарии в JS коде пишутся не так...


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