![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| begin |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 415 Регистрация: 16.5.2007 Репутация: нет Всего: нет |
Перед отправкой формы посылаю аяксом запрос на сервер, чтобы проверить данные. Php-cкрипт должен отдать либо error либо success. А js в зависимости от полученного ответа решит, что делать дальше:
С сервера приходит ответ и alert выводит его значение, но проблема в том, что переменной error_data ничего не присваивается - похоже внутри той функции она просто не видна. Пробовал объявлять эту переменную и так:
и так:
не помогло. Посоветуйте, как и где правильно объявить эту переменную, чтобы все заработало |
||||||
|
|||||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Вы пытаетесь считать значение переменной error_data еще до того как придет ответ от сервера (т.е. до того как будет выполнена callback-функция success) — в силу асинхронности запроса. Так что либо делайте запрос синхронным, либо переносите анализ ответа сервера в ф-цию success. |
|||
|
||||
| begin |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 415 Регистрация: 16.5.2007 Репутация: нет Всего: нет |
Понял, включу синхронность в аяксе. А подскажите - переменную я объявляю правильно? или все-же нужно иначе?
именно так нужно?
|
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
||||
|
||||
| begin |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 415 Регистрация: 16.5.2007 Репутация: нет Всего: нет |
Спросил потому, что в сети обнаружил противоречивые рекомендации, и мне, как начинающему, трудно в них соориентироваться.
Итак, пишут, что: 1. объявляя глобальную переменную, нужно писать не:
а:
2. обращаться к такой глобальной переменной внутри функции нужно не так:
а так:
|
||||||||
|
|||||||||
| Amphiluke |
|
||||||||||||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Это заблуждение. Переменные объявляются только при помощи ключевого слова var. Если вы не используете var, то это не объявление переменной, а создание свойства глобального объекта. Отличие в том, что истинные переменные обладают внутренним свойством, запрещающим их удаление оператором delete, а также истинные переменные участвуют в таком процессе как «поднятие» (hoisting). Конкретнее, переменные, созданные с помощью var, становятся свойством объекта переменных. Для «переменных», объявленных без var, эти утверждения уже не справедливы.
Это опять же из-за непонимания отличий между глобальной переменной и свойством глобального объекта (на который ссылается window). Вы можете обращаться к глобальным переменным (истинным переменным, объявленным при помощи var) через window, благодаря тому, что глобальный объект сам для себя является объектом переменных. |
||||||||||||
|
|||||||||||||
| begin |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 415 Регистрация: 16.5.2007 Репутация: нет Всего: нет |
Благодарю за такой подробный ответ
правильно ли я понял: могу в качестве второго способа, но и напрямую внутри функции я тоже могу обратиться к этой переменной, да?
|
||||
|
|||||
| Aliance |
|
||||||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 17 Всего: 137 |
begin, если говорить кратко и не вдаваясь в ньюансы, то объявление переменных без ключевого слова var в книжках обычно подразумевает создание переменной с глобальной областью видимости внутри функции со своей областью видимости. Поясню на примере:
идентичен такому коду:
Но зато сл. код выдаст ошибку
|
||||||
|
|||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |