вторник, 19 марта 2013 г.

Ослизмы. IE, jquery ajax и Invalid argument

Осваивая джаваскрипт, особенно начиная вникать в то КАК оно всё работает и дышит, часто натыкаешься на такие особенности, которых просто не ожидаешь. Проблема браузера это или же проблема надостаточной информативности jquery при выводе ошибок, но обходятся такие особенности только после продолжительного гугления и научного тыкания в небо. Сегодня речь пойдёт об ослике и ajax от jquery.


Приступим сразу к коду. Так как мы битрикс-ориентированы, то это будет типа код добавления товара в корзину. Сразу подпишем вывод в консоль ошибок.
var data = {};
data.id = 12345;
data.quantity = 2;
data.action = 'BUY';
data.actionADD2BASKET = 'Y';

$.ajax({
    type: 'POST',
    url: '',
    data: data,
    error: function(xhr, status, error)
    {
        console.log(xhr);
        console.log(status);
        console.log(error);
    },
    success:{/* типа успешно добавлен товар, пляшем и танцуем */}
    async: false,
});

Радуемся до тех пор, пока от заказчика не приходит тикет на то, что в IE товары не добавляются в корзину. Работает везде, кроме IE. Рвём на себе волосы, слушаем по случаю для вдохновения песенку


Итак, на выводе имеем xhr.status равный нулю и error.message = Invalid argument После некоторого гугления и многочисленных попыток найти похожий случай на http://stackoverflow.com находится-таки решение. Очень простое и неявное. Оказывается IE не любит, когда ему пустой урл
url: ''
дают. Ему надо, чтобы там хотя бы что-то было! Ставим туда слеш
url: '/'
и сдаём тикет.

Комментариев нет:

Отправить комментарий