Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Непоследовательная работа JS
 
 автор: gumplen   (02.11.2012 в 14:30)   письмо автору
 
 

Здравствуйте.
Есть функция такого плана:


function a(){
   relult = большой запрос ajax
   return result;
}
message = a();
alert(message)


Вызов этой функции дает результат "undefined", т.к. ajax запрос выполняется достаточно долго, и не дожидаясь результата выводится alert.

Как быть?

  Ответить  
 
 автор: confirm   (02.11.2012 в 14:57)   письмо автору
 
   для: gumplen   (02.11.2012 в 14:30)
 

Просто вызовите функцию (ничего возвращать не надо), проверьте статус, что возвращает?

  Ответить  
 
 автор: gumplen   (02.11.2012 в 14:59)   письмо автору
 
   для: confirm   (02.11.2012 в 14:57)
 

возвращает то что нужно. просто отрабатывает около секунды

  Ответить  
 
 автор: confirm   (02.11.2012 в 15:00)   письмо автору
 
   для: gumplen   (02.11.2012 в 14:59)
 

Что возвращает, какой статус?

  Ответить  
 
 автор: confirm   (03.11.2012 в 04:18)   письмо автору
 
   для: gumplen   (02.11.2012 в 14:59)
 

Тишина мертвецкая.
Если то, что нужно, это статус 200 или подразумеваются полученные данные, значит вы знаете где это можно посмотреть. Вот там где вы проверяете это, вот от туда и необходимо их возвращать (но есть маленькое но при этом), а вы пытаетесь вернуть контекст запроса.
По тому как вы обращаетесь к своей функции не видно даже и намека на то, что вам нужно вообще что-то возвращать - обращение не содержит аргументов. Поэтому назначайте обработчик события cuccess, и в нем оперируйте полученными данными, либо непосредственно в теле этой функции.

  Ответить  
 
 автор: gumplen   (05.11.2012 в 17:29)   письмо автору
 
   для: confirm   (03.11.2012 в 04:18)
 

А если в функции выполняется, например, обработка большого массива данных (не обязательно ajax)? Суть в том, что работает она долго (и я не знаю точно сколько).
То есть, я не знаю, что происходит в функции. AJAX я взял для примера.

  Ответить  
 
 автор: confirm   (05.11.2012 в 17:43)   письмо автору
 
   для: gumplen   (05.11.2012 в 17:29)
 

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

Можно либо событие "прикрутить", либо проверять по таймеру завершение, либо..., не знаю что еще либо, так как что вы там делаете, и почему долго, и как делаете...

  Ответить  
 
 автор: gumplen   (05.11.2012 в 17:48)   письмо автору
 
   для: confirm   (05.11.2012 в 17:43)
 

То есть узнать закончила функция работать или нет нельзя?

  Ответить  
 
 автор: ЯСА   (05.11.2012 в 18:08)   письмо автору
 
   для: gumplen   (05.11.2012 в 17:48)
 

почему нельзя?
можно

во всякой функции можно написать:
function abc ()
{
// чего-то делаем
alert ('сделали');
}

и alert () появится только тогда, когда весь предыдущий код будет исполнен

разумеется:
-- если код функции связан с рендерингом страницы, т.е. если в результате работы страница претерпит серьёзные изменения (будет переписана или добавлена на страницу какая-то таблица, коя изменит все размеры страницы), то alert () выскочит раньше, чем страница приведёт себя в надлежащий вид
-- а если код исполняется очень долго, то ещё до вашего alert () может "выскочить" системное сообщение "скрипт исполняется слишком долго. остановить исполнение? или продолжить?"

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования