ajaxSetup перед отправкой вызывается только при первом нажатии кнопки

#javascript #jquery #asp.net #ajax #asp.net-mvc

#javascript #jquery #asp.net #ajax #asp.net-mvc

Вопрос:

Я использую ASP.Net MVC и jQuery 1.8.2

У меня есть форма с кнопкой, которая вызывает этот javascript при нажатии:

 $(function () {
    $('#SearchButton').click(function () {
        var data = $('#FilterDefinition :input').serialize()   "amp;PageNumber=1";
        $.post('@Url.Action("Search")', data, LoadContentCallback);
        $("#SearchResults").show();
    });
});
  

Это вызывает действие контроллера MVC, которое возвращает результат PartialViewResult

На странице макета у меня есть следующий код JavaScript:

 //Add a custom header to all AJAX Requests
        $(document).ready(function () {                
            $.ajaxSetup({
                beforeSend: function(xhr) {
                    debugger;
                    if ($('[name=__RequestVerificationToken]').length) {
                        var token = $('[name=__RequestVerificationToken]').val();
                        xhr.setRequestHeader('__RequestVerificationToken', token);
                    }
                }
            });
        });
  

Когда кнопка нажата в первый раз, функция beforeSend вызывается правильно. Однако, если кнопка нажата более одного раза (например, они меняют критерии поиска и выполняют поиск снова), функция beforeSend никогда не вызывается снова, и проверка защиты от подделки завершается с ошибкой.

Вместо этого я попытался использовать событие ajaxSend и получил те же результаты.

Буду признателен за любую помощь в решении этой проблемы.

Спасибо!

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

1. Какой браузер вы используете?

2. Это происходит в Chrome, Firefox и IE.

Ответ №1:

Оказывается, проблема заключалась в том, что отображаемый частичный вид ссылался на другую версию jQuery. Я удалил эту ссылку, и все начало работать правильно.

Спасибо!

Ответ №2:

Я бы по возможности избегал использования $.ajaxSetup . Я бы просто настроил ваш beforeSend в фактическом запросе POST.

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

1. Не очень практично возвращаться к сотням вызовов POST по всему приложению, чтобы добавить это к каждому из них.