| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > функция не возвращает результат |
| Автор: z006 19.2.2010, 19:15 | ||
| Добрый день. есть вопрос,и подозреваю что глупый,ибо решение где-то на поверхности,но я его не вижу...(((( суть проблемы: имеем такой код:
вызываем ф-цию b,она вызывает ф-цию а с параметром.ф-ция а отрабатывает верно,если там проверять алертом значение переменной с-то все верно.но когда в ф-ции b идет вывод значения cvb - то выдает undefined. думал может не успевает передать значение.пробовал ставить в ф-цию b setTimeout.результат одинаковый. где тут псинка закопана? |
| Автор: Amphiluke 19.2.2010, 19:36 | ||
| Проблема явно не в том куске кода, который вы привели, а где-то в той части, что вы здесь не показали. Вот сами проверьте:
|
| Автор: z006 19.2.2010, 20:17 | ||
и правда этот пример работает.....очень странно....выкладываю весь кусок кода
результат,прилетающий от пхп файла,простой: 0 или 1 |
| Автор: Amphiluke 19.2.2010, 20:28 | ||||
| Ну вот и покажите мне теперь где у вас написано, чтобы функция check1 возвращала бы какое-либо значение? Строка
это возврат значения вложенной функцией handleAjaxResponse, а вот сама check1 нигде ничего не возвращает. |
| Автор: z006 19.2.2010, 20:36 | ||
| вот я видимо сейчас опозорюсь с этим вопросом,но а как заставить её вернуть это значение именно от имени ф-ции check1? если ставлю переменню с как глобальную,и переношу ретёрн так,то все-равно андефинед.
|
| Автор: z006 19.2.2010, 20:48 |
| это я понимаю,но я хотел чтоб у меня была одна функция,которая сможет отсылать запросы на пхп"шные файлы,и получать их ответы,а потом уже отдавать этот полученный ответ тем функциям,которые первоначально запросили его,чтоб уже в этих мелких ф-циях разбирать эти ответы как надо.грубо говоря жалкое подобие библиотеки что-ли надо... но почему-то не получается.....как его "вывернуть",чтоб оно заработало как мне надо? |
| Автор: Amphiluke 19.2.2010, 20:49 |
| P.S. Если непонятно сказал, функция check1 завершается раньше, чем будут получены данные. Добавлено через 3 минуты и 11 секунд У вас используются асинхронные запросы? Ну если так нужно, сделайте синхроные. Но тогда нужен будет тот ход с глобальной переменной c, который вы только что пробовали. Добавлено через 6 минут и 37 секунд А вообще я не вижу ничего плохого в том, чтобы по получении данных асинхронным запросом, вызвать в методе onreadystatechange нужную ф-цию обработки полученных данных. Зачем возвращаться в вызывавшую функцию? |
| Автор: z006 19.2.2010, 21:05 |
| ну я просто ж не знаю в какую ф-цию надо будет передать результат. это что,для вызова ф-ции check1 допустим по нажатию кнопки,к примеру,в onmouseup надо будет указать параметры:поле откуда берем значение,имя ф-ции,куда будем отдавать результат. так получается? |
| Автор: Amphiluke 19.2.2010, 21:14 |
| Ну если вы не знаете, в какую ф-цию передавать данные, то, видимо, да, так. Человек, который будет вызывать ф-цию check1, должен будет передать ей в параметре указатель на нужную ему callback-функцию. А метод onreadystatechange по этому указателю вызовет функцию. Если помимо этого есть много других передаваемых параметров, их можно объединить в один объект, методом которого будет в частности и callback-функция. И тогда нужно будет лишь передавать функции check1 указатель на этот объект. |
| Автор: z006 19.2.2010, 21:18 |
| я перенабросал код,но стал немного в тупик.если у меня имя функции содержится в переменной скажем funcname ,то не вызову-же я эту функцию так: funcname( с ); как её вызвать?........ |
| Автор: Amphiluke 19.2.2010, 21:21 |
| Передавайте не имя функции в виде строки, а указатель на нее. Либо, если передаете имя-строку, можно воспользоваться ф-цией eval для вызова по имени... Хотя это менее предпочтительный вариант, чем первый. |
| Автор: z006 19.2.2010, 21:37 |
| поставили в тупик. опыта и знаний маловато.ушел читать литературу.за ссылки что почитать-буду благодарен. |
| Автор: Amphiluke 19.2.2010, 21:41 |
| А что не получается-то? |
| Автор: z006 19.2.2010, 21:45 |
| по поводу вызова функции через указатель или евал |
| Автор: Amphiluke 19.2.2010, 21:52 | ||||
Ну вот например...
или
|
| Автор: z006 19.2.2010, 21:56 |
| к сожалению плюсик жмакать не могу,т.к. не имею 100 постов. поэтому просто большое человеческое спасибо. буду разбираться уже завтра,на сегодня все.если что-я еще напишу завтра. |
| Автор: z006 20.2.2010, 20:08 | ||
странно....у меня не выходит.....вызываю по событию onkeyup=checkdata('childlogin','checklogin') ,где checklogin это имя функции которой надо отдать результат.
в обработчике мне выдает Ошибка: funcname is not a function где я не уловил суть? |
| Автор: Amphiluke 20.2.2010, 20:21 |
| Если передаете строковое представление имени функции, вызывайте с помощью eval, как показано выше. А лучше передавайте указатель. |
| Автор: z006 20.2.2010, 20:31 |
| точно.передал не как строковые данные-и заработало! спасибо огромное! |