Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Вопрос по коду (https://javascript.ru/forum/project/41610-vopros-po-kodu.html)

ramko 21.09.2013 19:16

Вопрос по коду
 
Коллеги добрый день.

Прошу прощения за нубский вопрос, но уже голову сломал.

есть на странице такая функция.

function getOwnCnt(nomenklatura_n)	{
		$.ajax({
		type: "POST",
		url: "./includes/get_own_cnt.php",
		data: "nomenklatura_n="+nomenklatura_n,
		success: function (data)	{
			return data;
			}
		});
	}

var test = getOwnCnt(1061037);
alert(test);

так вот последняя команда alert выдает undefined...
если вместо return data; делаю alert(data); все отображает правильно.

Прошу указать мою ошибку...

Dim@ 21.09.2013 19:26

надо так
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
function getOwnCnt(nomenklatura_n)  {
        var DATA;
        $.ajax({
        type: "POST",
        url: "./includes/get_own_cnt.php",
        data: "nomenklatura_n="+nomenklatura_n,
        success: function (data)    {
            DATA = data;
            return data;
            }
        });
        return DATA;
    }
 
var test = getOwnCnt(1061037);
alert(test);

bes 21.09.2013 19:27

Dim@, опередил, да-да, всё дело в отсутствии return непосредственно в теле ajax() :D

ramko 21.09.2013 19:37

function getOwnCnt(nomenklatura_n)  {
        var DATA;
		nomenklatura_n = 1061036;
        $.ajax({
        type: "POST",
        url: "./includes/get_own_cnt.php",
        data: "nomenklatura_n="+nomenklatura_n,
        success: function (data)    {
            DATA = data;
			//alert (data); // здесь все правильно отображает
            return data;
            }
        });
		alert (DATA); // здесь также падает undefined
        return DATA;
		
    }

bes 21.09.2013 19:47

Цитата:

Сообщение от ramko
здесь также падает undefined

setTimeout надо добавить

ramko 21.09.2013 19:56

Цитата:

Сообщение от bes (Сообщение 273115)
setTimeout надо добавить

Можете подсказать для чего он тут?
В моем понимании если по ходу функции, уже есть правильный ответ он и дальше должен передаваться.

bes 21.09.2013 20:02

Цитата:

Сообщение от ramko
Можете подсказать для чего он тут?
В моем понимании если по ходу функции, уже есть правильный ответ он и дальше должен передаваться.

в твоём понимании, ты не добавил return непосредственно в тело функции, поэтому передаваться было нечему
смысл заключён в названии технологии


рабочий код
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
(function getOwnCnt(nomenklatura_n)  {
        var DATA;
		nomenklatura_n = 1061036;
        $.ajax({
        type: "POST",
        url: "http://lookatcode.com",
        data: "nomenklatura_n="+nomenklatura_n,
        success: function (data)    {
            DATA = data;
			//alert (data); // здесь все правильно отображает
            return data;
            }
        });
		setTimeout(function () {alert (DATA)}, 2000);
        return DATA;
		
    })();
</script>

ramko 21.09.2013 20:18

Спасибо, работает. Насколько я понял просто функция продолжила выполняться, а когда пришел ответ уже все строки были выполнены.

bes 21.09.2013 20:27

Цитата:

Сообщение от ramko
Спасибо, работает. Насколько я понял просто функция продолжила выполняться, а когда пришел ответ уже все строки были выполнены.

правильно, теперь тебе осталось только выложить рабочий код с передачей ответа во внешний alert() без setTimeout
возможность запуска [html run]

ramko 21.09.2013 21:07

мне удобнее получить ответ через return от функции и дальше его обрабатывать, алерт был нужен только для проверки.
Если я перед финальным return делаю
while (typeof cnt == "undefined")	{
} // получаю бесконечный цикл

как в такой ситуации выкрутиться ? решение с таймером неудобное.


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