|
|
|
| Здравствуйте.
Есть функция такого плана:
function a(){
relult = большой запрос ajax
return result;
}
message = a();
alert(message)
|
Вызов этой функции дает результат "undefined", т.к. ajax запрос выполняется достаточно долго, и не дожидаясь результата выводится alert.
Как быть? | |
|
|
|
|
|
|
|
для: gumplen
(02.11.2012 в 14:30)
| | Просто вызовите функцию (ничего возвращать не надо), проверьте статус, что возвращает? | |
|
|
|
|
|
|
|
для: confirm
(02.11.2012 в 14:57)
| | возвращает то что нужно. просто отрабатывает около секунды | |
|
|
|
|
|
|
|
для: gumplen
(02.11.2012 в 14:59)
| | Что возвращает, какой статус? | |
|
|
|
|
|
|
|
для: gumplen
(02.11.2012 в 14:59)
| | Тишина мертвецкая.
Если то, что нужно, это статус 200 или подразумеваются полученные данные, значит вы знаете где это можно посмотреть. Вот там где вы проверяете это, вот от туда и необходимо их возвращать (но есть маленькое но при этом), а вы пытаетесь вернуть контекст запроса.
По тому как вы обращаетесь к своей функции не видно даже и намека на то, что вам нужно вообще что-то возвращать - обращение не содержит аргументов. Поэтому назначайте обработчик события cuccess, и в нем оперируйте полученными данными, либо непосредственно в теле этой функции. | |
|
|
|
|
|
|
|
для: confirm
(03.11.2012 в 04:18)
| | А если в функции выполняется, например, обработка большого массива данных (не обязательно ajax)? Суть в том, что работает она долго (и я не знаю точно сколько).
То есть, я не знаю, что происходит в функции. AJAX я взял для примера. | |
|
|
|
|
|
|
|
для: gumplen
(05.11.2012 в 17:29)
| | Молодцом, AJAX, это несколько иное, чем ваша пользовательская функция обработки массива. Даже, если, вы бы написали пример скажем так, грамотно, имея ввиду присваивание, возврат из вашей функции не будет ждать окончания запроса и произойдет сразу.
Можно либо событие "прикрутить", либо проверять по таймеру завершение, либо..., не знаю что еще либо, так как что вы там делаете, и почему долго, и как делаете... | |
|
|
|
|
|
|
|
для: confirm
(05.11.2012 в 17:43)
| | То есть узнать закончила функция работать или нет нельзя? | |
|
|
|
|
|
|
|
для: gumplen
(05.11.2012 в 17:48)
| | почему нельзя?
можно
во всякой функции можно написать:
function abc ()
{
// чего-то делаем
alert ('сделали');
}
|
и alert () появится только тогда, когда весь предыдущий код будет исполнен
разумеется:
-- если код функции связан с рендерингом страницы, т.е. если в результате работы страница претерпит серьёзные изменения (будет переписана или добавлена на страницу какая-то таблица, коя изменит все размеры страницы), то alert () выскочит раньше, чем страница приведёт себя в надлежащий вид
-- а если код исполняется очень долго, то ещё до вашего alert () может "выскочить" системное сообщение "скрипт исполняется слишком долго. остановить исполнение? или продолжить?" | |
|
|
|