Проблема с jQuery $ .get в IE - PullRequest
4 голосов
/ 05 мая 2009

У меня есть форма входа в систему, которая появляется вверху всех моих страниц, когда пользователь выходит из системы. Мой текущий код jQuery / javascript работает в Firefox 3, но не в IE 7. Код запрашивает страницу, которая просто возвращает строку «true» или «false» в зависимости от того, был ли вход успешным или нет. Внутри моего вызова функции $ .ready () у меня есть следующее ...

$('#login_form').submit(function() {

        var email = $('input#login_email').val();
        var pw = $('input#login_password').val()

        $.get('/user/login.php', { login_email: email, login_password: pw }, function(data) {
            alert('get succeeded');
            if(data == 'true') {
                $('#login_error').hide();
                window.location = '/user/home.php';
                alert('true');
            }
            else {
                $('#login_error').show();
                alert('false');
            }

        });

        alert('called');

        return false;
    });

В FF я успешно переведен на предполагаемую страницу. В IE, однако, нижеприведенные оповещения «звонили» и больше ничего. Когда я обновляю страницу, я вижу, что я вошел в систему, так что вызов $ .get явно проходит, но функция обратного вызова не похожа на то, что она вызывается (т. Е. «Получить успешно» не появляется). Я также, кажется, не получаю никаких сообщений об ошибках javascript.

Почему это не работает в IE?

Спасибо

РЕДАКТИРОВАТЬ: Поскольку пара человек спрашивала, всякий раз, когда я ввожу правильный адрес электронной почты / пароль или неправильный, ничего в функции обратного вызова не происходит. Если я вручную обновлю страницу после ввода правильной, я войду в систему. В противном случае я не буду.

РЕДАКТИРОВАТЬ 2: Если я выдаю предупреждение data в функции обратного вызова, в IE ничего не происходит (я не получаю всплывающее окно с предупреждением). В FF он оповещает true о допустимых комбинациях email / pw и false о недействительных. Я использую jQuery 1.3.2.

РЕДАКТИРОВАТЬ 3: Хорошо, ребята, я попробовал вещь Р. Бемроуза там, и я получаю "parseerror" на возвращенных данных. Я просто повторяю 'true' или 'false' из другого скрипта PHP. Я также попробовал «да» и «нет», но это все равно дало мне ошибку разбора. Кроме того, это работает в Chrome в дополнение к FF.

Ответы [ 8 ]

5 голосов
/ 05 мая 2009

В вашем типе ответа используйте:

заголовок ( "Content-Type: применение / XML; кодировка = UTF-8");

2 голосов
/ 05 мая 2009

Как бы глупо это не звучало ... может быть, IE7 анально хранит пропущенную точку с запятой в строке var pw?

Возможно, нет, но единственный способ получить больше информации - это преобразовать ее в вызов $ .ajax, чтобы добавить обработчик ошибок и посмотреть, какой тип ошибки, по его мнению, происходит. Да, и чтобы проверить объект исключения.

$.ajax({
        type: 'GET',
        url: '/user/login.php',
        data: { login_email: email, login_password: pw },
        success: function(data) {
                alert('get succeeded');
                if(data == 'true') {
                        $('#login_error').hide();
                        window.location = '/user/home.php';
                        alert('true');
                }
                else {
                        $('#login_error').show();
                        alert('false');
                }
        },
        error: function(xhr, type, exception) {
                alert("Error: " + type);
        }
});

Если тип ошибки - синтаксический анализ, IE может жаловаться, потому что возвращающиеся данные имеют дополнительные запятые в конце разделенных запятыми массивов / списков.

1 голос
/ 09 апреля 2011

У меня похожая проблема со следующим кодом:

var listOrder = $(this).sortable('toArray').toString();
var otherVariable = whatever
$.get('process_todo.cfm?method=sortToDos', {listOrder:listOrder,otherVariable :otherVariable });

Переменная отображается через предупреждение как «test_123, test_456». Я могу жестко закодировать те же значения, и это не сбоит. Это должно быть как-то связано с 'toArray'? Я пытался отладить эту вещь часами. Отлично работает в Firefox, Safari и Chrome ... конечно!

1 голос
/ 05 мая 2009

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

В любом случае, не лучше ли отправить пароль в POST? :)

0 голосов
/ 22 декабря 2009

если вы тестируете / проверяете свой скрипт на локальном компьютере, то вы не увидите ничего в любой версии Internet Explorer, потому что IE на локальной машине отправляет тип данных в виде текста, а не в формате xml, и в вашем случае снова его тип данных не совместим с ваш тип данных документа, поэтому стоит проверить, совпадают ли ваши типы данных

что касается xml, решение здесь http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests

Вы можете проверить это и найти вдохновение:)

САЛМАН

0 голосов
/ 05 мая 2009

Вы использовали Fiddler, чтобы хорошо посмотреть, что на самом деле переводится? (http://www.fiddler2.com)

0 голосов
/ 05 мая 2009

То, что вы опубликовали (по крайней мере, после редактирования 2), выглядит хорошо. Я думаю, что проблема в том, что вы не опубликовали .

Во-первых, вы проверили журналы вашего сервера, чтобы убедиться, что он отправляет обратно то, что вы предполагаете?

Если это так, я бы рекомендовал отключить механизм отправки и использовать тип кнопки с обработчиком onclick, а не кнопку отправки с обработчиком onsubmit ...

 <input type="button" id="login_submit" value="Login" />

Затем переключите обработчик отправки:

  $('#login_form').submit(function() { ... });

из формы на кнопку с:

  $('#login_button').click(function() { ... });

Если это не поможет, можете ли вы опубликовать HTML-код для формы?

[Редактировать 3] - попробуйте добавить 4-й параметр типа «text» к вызову $ .post ().

0 голосов
/ 05 мая 2009

Вместо:

if (data == 'true')

попробовать:

если (данные)

тогда на вашем сервере просто верните 1 (или true) и пустое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...