Новичок: что делает jQuery.ajaxSetup 'beforeSend'? - PullRequest
1 голос
/ 31 июля 2009

Я использую это в приложении Rails. и у меня есть код, который меняет тип ответа на javascript.

jQuery.ajaxSetup({
    'beforeSend': function(xhr) {
        xhr.setRequestHeader("Accept", "text/javascript")
    }
})

Это прекрасно работает при отправке формы, но, похоже, она не вызывается при отправке формы javascript, сгенерированной AJAX, для нажатия на ссылку (код продолжает проходить через HTML-ответчик Rails).

Вероятно, простое исправление. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 01 августа 2009

Настройка заголовка XHR необходима для JQuery, если вы хотите использовать блоки формата Rails 'response_to .... Прототип устанавливает это по умолчанию, но вам нужно установить его вручную в JQuery, так как опция format.js выполняется, когда text / javascript находится в заголовке accept.

Вы уверены, что ваш запрос AJAX на самом деле запущен? Возможно, ваш обработчик не подключен, а ссылка отправляет обычный HTTP GET?

0 голосов
/ 01 августа 2009

Я не уверен, что вы имеете в виду под "формой javascript, сгенерированной AJAX" - возможно ли, что вы генерируете форму в DOM с помощью javascript, а затем регулярно отправляете ее, нажимая (через javascript) кнопку ? Если это так, то он отправляется не через AJAX, а как обычный пост. Обработчик beforeSend вызывается только тогда, когда форма отправляется через AJAX. Ваш установочный вызов добавляет стандартную функцию beforeSend, которая устанавливает заголовок Accept так, чтобы возвращался javascript, но он делает это только для запросов, отправленных через AJAX.

Вот как выглядит AJAX-представление:

$.ajax({
   url: '/controller/action',
   type: 'post',
   dataType: 'json',
   data: $('form').serialize(),  // this gets the form data
   success: function() {
   },
   ...
});

Это форма и представление, созданные в javascript (не AJAX).

$('<form><input type="hidden" name="inp" value="somedata" /></form>')
    .appendTo(document.body)
    .submit();

или (нажатием кнопки)

$('form #submitButton').click( function() {
    $('form').submit()
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...