Ajax не запускает выполненный обратный вызов при первой публикации формы, однако работает вторая публикация

#jquery #ajax #razor

#jquery #ajax #razor

Вопрос:

У меня есть форма, которую я публикую, используя JS ниже. Когда я запускаю сеанс отладки в Visual Studio, первая отправка формы не запускает обратный вызов done, и я перенаправляюсь на форму. При второй отправке запускается обратный вызов done, и мое перенаправление работает. Я могу подтвердить, что функция onDone вызывается в обоих случаях, и никаких ошибок не произошло. Форма отправляется на страницу Razor, которая отвечает новым OkResult() . Кто-нибудь знает, почему вызов done не работает во время первого сообщения?

 function onDone(e) {
  e.preventDefault();
  var form = $("#wizard");
  $.ajax({
    type: 'POST',
    url: "@Url.Page("Index","Submit")",
    beforeSend: function(xhr) {
      xhr.setRequestHeader("RequestVerificationToken", 
        $('input:hidden[name="__RequestVerificationToken"]').val());
    },
    data: form.serialize(),
    // dataType: 'json',
  }).fail(function(jqXHR, textStatus, errorThrown) {
    console.log(textStatus);
  }).success(function(data) {
    console.log("Done hit")
    window.location.href = '/FormComplete';
    //  kendo.alert(data.success);
    //  form.getKendoForm().clear();
  });
}
  

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

1. Какую версию jQuery вы используете? Начиная с версии 3, у jqXHR объекта больше нет .success() метода. Вместо этого вы должны использовать .done()

2. Звучит как проблема с кэшированием. Попробуйте очистить кэш вашего браузера

3. Я использую jQuery версии v1.12.4. Я очистил кеш, но результат тот же.

4. Вау, эта версия древняя. По крайней мере, перейдите к версии 2.

5. Я использую некоторые компоненты Telerik, и шаблон VS, который они предоставили, использовал эту версию. Я был удивлен, насколько оно старое. Я только начал использовать v2, но, к сожалению, сталкиваюсь с той же проблемой.