#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 по всему приложению, чтобы добавить это к каждому из них.