Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странность AJAX, Неадекватное реагирование скрипта 
:(
    Опции темы
DoubleBubble
Дата 10.9.2014, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.9.2014

Репутация: нет
Всего: нет



Здравствуйте. Возникла проблема при использовании AJAX. Технологию только начинаю юзать.
Есть такой AJAX-запрос:
Код

$.ajax({
    type: 'POST',
    url: '/pages/registrationnonexist.php',
    data: 'm=check&email=lalka',
    complete: function() {
        notices.email = 'Пользователь с таким e-mail уже зарегистрирован!';
    }
});

Здесь - тестовый кусок скрипта регистрации, загружающий несуществующую страницу. В настройке "complete" я объявляю свойство объекта "notice" "email". Но оно не выходит за пределы этой функции! Почему так?
PM MAIL   Вверх
Aliance
Дата 10.9.2014, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Внутри complete переменная notices же только лишь используется, тогда уточните где и как она объявляется?
Так же напишите, как идет к ней последующее обращение, после чего вы решили, что она "не выходит за пределы функции".

Добавлено через 3 минуты и 3 секунды
В общем случае могу ответить так: вам нужно почитать про замыкания и области видимости (scope), рекомендую JS Garden. Конкретнее скажу после ваших ответов на мои вопросы выше smile
PM MAIL WWW ICQ Skype   Вверх
DoubleBubble
Дата 10.9.2014, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.9.2014

Репутация: нет
Всего: нет



Код

$(function() {
    
    // ...
    
    /*function show_notices (object, action)
    {
        if (action == 'show')
        {
            for (k in object)
            {
                if (k == 'birth')
                {
                    $('#registration_' + k + '_notice').text(object[k]);
                    $('#registration_' + k + '_notice_table_cell, #registration_' + k + '_notice').show();
                }
                else if (k == 'recaptcha')
                {
                    $('#registration_' + k + '_notice').text(object[k]).css('display', 'inline-block');
                }
                else
                {
                    $('#registration_' + k + '_notice').text(object[k]).show();
                }
            }
        }
        else if (action == 'hide')
        {
            for (k in object)
            {
                if (k == 'birth')
                {
                    $('#registration_' + k + '_notice').text('');
                    $('#registration_' + k + '_notice_table_cell, #registration_' + k + '_notice').hide();
                }
                else
                {
                    $('#registration_' + k + '_notice').text('').hide();
                }
            }
        }
    }*/
    
    var notices = {<? echo $notices_string; ?>};
    show_notices (notices, 'show');
    
    $('#registration_button').click(function() {
        show_notices (notices, 'hide');
        notices = {};
        
        /* Фамилия.
        if (!$('#registration_second_name').val().trim())
        {
            notices.second_name = 'Заполните поле!';
        }
        else
        {
            if ($('#registration_second_name').val().trim().length > 60 || /[^a-zA-Zа-яА-ЯёЁ\-]/.test($('#registration_second_name').val().trim()))
            {
                notices.second_name = 'Неверная фамилия!';
            }
        }*/
        
        // ...
        
        /* E-mail. */
        if (!$('#registration_email').val().trim())
        {
            notices.email = 'Заполните поле!';
        }
        else
        {
            if ($('#registration_email').val().trim().length < 5 || $('#registration_email').val().trim().length > 60 || !/@/.test($('#registration_email').val().trim()) || !/\./.test($('#registration_email').val().trim()) || /[^\w-@.]/i.test($('#registration_email').val().trim()))
            {
                notices.email = 'Неверный e-mail!';
            }
            else
            {
                $.ajax({
                    type: 'POST',
                    url: '/pages/registration.php',
                    data: 'm=check&email=lalka',
                    complete: function() {
                        notices.email = 'Пользователь с таким e-mail уже зарегистрирован!';
                        alert (notices.email); // 'Пользователь с таким e-mail уже зарегистрирован!'
                    }
                });
                
                alert (notices.email); // 'NaN'
            }
        }
        
        // ...
        
        if (object_is_empty(notices))
        {
            $('form').submit();
        }
        else
        {
            show_notices (notices, 'show');
            
            var first_notice = '#registration_' + object_first_element(notices, 'k') + '_notice';
            
            $('html, body').animate({
                scrollTop: ($(first_notice).offset().top - $('.header').outerHeight() - 30) + 'px'
            }, 800, 'linear');
        }
    });
});


Это сообщение отредактировал(а) DoubleBubble - 10.9.2014, 15:47
PM MAIL   Вверх
_zorn_
Дата 11.9.2014, 03:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: 1
Всего: 12



Код
$.ajax({
                    type: 'POST',
                    url: '/pages/registration.php',
                    data: 'm=check&email=lalka',
                    complete: function() {
                        notices.email = 'Пользователь с таким e-mail уже зарегистрирован!';
                        alert (notices.email); // 'Пользователь с таким e-mail уже зарегистрирован!'
                    }
                });
                
                alert (notices.email); // 'NaN'

Второй алерт выполнится раньше того как отработает аякс запрос.

PM MAIL   Вверх
Aliance
Дата 11.9.2014, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Кроме того, у вас переменная notices объявлена внутри замыкания, она не будет доступна в глобальном контексте window.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.