Проблемы с jquery ajax и safari при передаче имени пользователя / пароля - PullRequest
2 голосов
/ 30 марта 2011

Мы пытаемся передать учетные данные на наш сайт через jquery ajax (не используя php [да, я знаю, что это небезопасно]).

Кажется, у Safari возникли проблемы с атрибутами username / password метода ajax. ( jquery ajax ) Мы используем jquery 1.5.1.

Вот пример кода:

$.ajax({
    url: "/some/url",
    type: 'GET',
    cache: true,
    dataType: 'json',
    processData: false,
    data: 'get=login',
    timeout: 7000,
    username: "user",
    password: "pass",
    success: function (data, textStatus, response) {
        Log("success");
    },
    error: function (data, textStatus, response) {
        Log("fail");
    }
});

Это прекрасно работает в Firefox, Chrome и IE7 / 8, но Safari даже не отправляет ajax на сервер (выполнил трассировку с помощью wireshark, и ничего не происходит). Как ни странно, вызывается функция error.

Если я закомментирую имя пользователя и пароль, ajax отправляется.

Ответы [ 4 ]

2 голосов
/ 09 марта 2012

Проще:

$.ajax({
    url: "/some/url",
    type: 'GET',
    cache: true,
    dataType: 'json',
    processData: false,
    data: 'get=login',
    timeout: 7000,
    headers: {
        "Authorization": "Basic " + Base64.encode("username:password")
    },
    success: function (data, textStatus, response) {
        Log("success");
    },
    error: function (data, textStatus, response) {
        Log("fail");
    }
});

Это работает для меня.

Привет

1 голос
/ 28 ноября 2011

Мне удалось решить эту проблему, используя beforeSend и создав заголовок запроса.Видимо, если это не включено, Safari задыхается и ничего не отправляет.Вот код:

$.ajax({
    url: "/some/url",
    type: 'GET',
    cache: true,
    dataType: 'json',
    processData: false,
    data: 'get=login',
    timeout: 7000,
    username: "user",
    password: "pass",
    beforeSend: function (req) {
        req.setRequestHeader('Authorization', "Basic " + btoa("user:password"));
    }
    success: function (data, textStatus, response) {
        Log("success");
    },
    error: function (data, textStatus, response) {
        Log("fail");
    }
});
0 голосов
/ 08 мая 2011

Я только что заметил, что ввод "@" в имени пользователя или пароле приводит к тому же поведению, что и вы. Safari, кажется, требователен к тому, какие символы вы можете использовать ...

0 голосов
/ 30 марта 2011

Вы видели предупреждение против фишинга, которое Safari отображает при нажатии на URL-адрес, содержащий имя пользователя и пароль?

http://username:password@example.com/

Safari ant-phising warning

Вполне вероятно, что это то же самое, что предотвращает даже отправку вашего AJAX-запроса (так как он фактически не загружает сайт и, следовательно, не отправляет запрос, пока вы не нажмете кнопку Игнорировать).

Попробуйте загрузить AJAX-запрос в главном браузере, нажмите «Игнорировать предупреждение», а затем снова попробуйте AJAX-запрос, чтобы посмотреть, сработает ли он.

...