Изменение jQuery и методы Ajax периодически терпят неудачу в IE и Firefox в Windows - PullRequest
0 голосов
/ 28 февраля 2012

Мне не удалось воспроизвести эту ошибку в моих средах тестирования, но нам регулярно звонили клиенты, утверждая, что, по сути, событие выбора меню onChange не может заполнить второе меню.Они выбирают первое меню, и оно зависает без создания второго меню, из которого нужно заполнить форму.

Я использую метод change(), назначенный первому меню выбора, чтобы выполнить запрос Ajax насервер, чтобы получить второе меню, которое заполняется значениями, основанными на том, что выбрано в первом.Я использую jQuery 1.7.1, и этот метод успешен во всех моих средах тестирования.

Эти вызывающие стороны используют Firefox и IE на компьютерах с Windows;пока что нет звонков от пользователей Mac или пользователей Windows с другими браузерами.Я хотел бы получить от них больше информации, но эти пользователи довольно неопытны даже в том, как искать сообщение об ошибке в браузере.Я реализовал следующие исправления, рекомендованные в других решениях, опубликованных в StackOverflow и других платах, но все еще безуспешно:

  • Отключите свойство cache в вызовах Ajax
  • Использование $ ('.selectMenu'). change () вместо $ ('. selectMenu'). bind ('change', function () {...});
  • Принудительное использование HTTPS в путях Ajax (так какэто в защищенной форме)
  • Проверьте и убедитесь, что политика Ajax вызывает одно и то же происхождение
  • Убедитесь, что метод change () заканчивается на return false, чтобы jQuery не пропускал событие

С этим вот мой код.Это довольно просто и соответствует стандартным примерам реализации методов jQuery change() и ajax().Есть два выбора меню.Когда выбирается первый, он запускает Ajax-запрос на сервере для получения содержимого для второго меню на основе значения, выбранного в первом.

$('#Sections').change(function() {
    $('#sectionsIndicator').css('display', 'block');
    $.ajax({
        async: true,
        type: 'post',
        url: 'https://example.com/getCategoriesMenu',
        data: { id: $('#Sections').val() },
        dataType: 'html',
        cache: false,
        success: function(data) {
            $('#_categories').html(data);
            $('#sectionsIndicator').css('display', 'none');
            preview.update(); //render a preview of the whole form
        },
        error: function(xhr, status, error) {
            var msg = "It appears an error has occurred while trying to update the Categories menu.";
            msg += " Please try adjusting your security settings or refreshing this page before attempting to post this form.";
            msg += " [ Status: " + status + "   Error: " + error + " ]";
            alert(msg);
        }
    });
    return false;
});

Значение data в случае успешногоAjax-запрос представляет собой меню HTML <select>.Селектор #_categories соответствует <div>, обернутому вокруг второго меню выбора.

Как я уже говорил выше, я не могу вызвать ошибку во всех основных браузерах на Mac, Windows XP,Windows Vista и Windows 7.Но я не могу отрицать, что пользователи сообщают об остановке меню, как только они пытаются сделать выбор.

1 Ответ

0 голосов
/ 28 февраля 2012

Вы пропустили точку с запятой после msg += " Please try adjusting your security settings or refreshing this page before attempting to post this form." Это может вызывать проблему

...