jQuery Ajax beforeSend не работает в Firefox - PullRequest
1 голос
/ 07 декабря 2011

Я пытаюсь выполнить запрос ajax-post, используя jQuery, и мне нужно добавить пользовательские заголовки (для CSRF dJango).Я попробовал некоторый код, подобный этому:

var load = function() {
    $.ajax({
        type: 'POST',
        url: '/ajax/get_page/',
        data: $.toJSON({
            section: section,
            subsection: subsection,
            page: page.page
        }),
        beforeSend: function(xhr, settings) {
            xhr.setRequestHeader("exmpl", "abcdef");
        },
        success: function (data){
            container.html(data);
            page.init(container);
            show();
        }
    });
}

И он отлично работает в Chrome, но не работает в Firefox (Fedora, Firefox 8, jQuery 1.7).Кажется, что он даже не выполняет функцию beforeSend.

Есть идеи?

1 Ответ

0 голосов
/ 07 декабря 2011

Я просто догадываюсь здесь, но $ .ajax.beforeSend должен нормально работать в Firefox, однако есть известная проблема с setRequestHeader в Firefox, и обычно ему нужно открыть XMLHttpRequest, прежде чем он сможет запустить setRequestHeader, ноэто в нативном javascript, и я не уверен, что jQuery как-то исправил это как-то внутренне?

Что-то вроде:

xhr.open(method,url,async,username,password); 
xhr.setrequestheader("exmpl", "abcdef");

Проверьте firebug на что-то вроде "Ошибка: необработанное исключение: [Исключение ... "Компонент возвратил код ошибки: 0x804b000f [nsixmlhttprequest.setrequestheader]", чтобы увидеть, регистрируется ли это ошибка или регистрируются ли какие-либо другие ошибки, опубликуйте их здесь.При чтении документации для $ .ajax он говорит:

В настоящее время из-за ошибки в Firefox, где .getAllResponseHeaders () возвращает пустую строку, хотя .getResponseHeader ('Content-Type') возвращаетнепустая строка, автоматически декодирующая ответы JSON CORS в Firefox с помощью jQuery, не поддерживается.

Не знаю, имеет ли это какое-то отношение к вашей проблеме, поскольку это не совсем та же функция, но звучит несколько взаимосвязанно, на jQuery страницах для Ajax есть обходной путь.

...