Member 12697982 Ответов: 1

Ajax вызов не работает при повторном вызове


Привет там, может кто-то pls помочь мне здесь, я вызываю ниже функцию ajax при нажатии кнопки, эта функция вызывает метод контроллера в 1-й раз,2-й раз и на 3-й раз функция не вызывает метод контроллера, без вызова метода контроллера он выполняет блок success. я попытался добавить asc:false в параметры ajax, которые не работают.
function Applicant() {
    $.ajax({
        type: "GET",
        url: "/CreateApplicationFromSearch/CreateApplicationFromSearch",
        contentType: "application/json; charset=utf-8",
        async: false,
        data: { "Applicant_id": ApplicantId, "Application_id": ApplicationId, "OfficeHolder_id": OfficeHolderId, "AccountDetail_Id": AccountDetailId, "contact_person_id": ContactPersonId },
        dataType: "html",
        success: function (data) {

            ("Sucess");
        },

        error: function () {
            alert("Errors arose.");
        }
    });

@using (Html.BeginForm("SaveApplicant", "CreateApplicationFromSearch", FormMethod.Post, new { Application_id = @ViewBag.Application_id, OfficeHolder_id = @ViewBag.OfficeHolder_id, enctype = "multipart/form-data", id = "ApplicantForm" }))


Код в контроллере
[httpGet]
[AllowAnonymous]

public ActionResult CreateApplicationFromSearch(int Applicant_id, int Application_id, string OfficeHolder_id, int? AccountDetail_Id, string contact_person_id, bool? CameFromLink, bool? Application_Submitted,bool? Validate_PartOne=false )

{
Applicant = Applicant_Service.GetApplicantById(Applicant_id);
@ViewBag.Application_id = Application_id;
ViewData["OfficeHolder_id"] = OfficeHolder_id;
ViewData["AccountDetail_Id"] = AccountDetail_Id;
ViewData["contact_person_id"] = contact_person_id;
return View("../Application/CreateApplicantFromSearch", Applicant);

}


Что я уже пробовал:

tried adding async: false in ajax options.

Richard Deeming

JQuery ajax метод не принимает опцию под названием "asc". Вы имели в виду "кэш" вместо этого?

на jQuery."Аякс" () | библиотека jQuery API документация[^]

Member 12697982

Извините, что я попробовал async: false, когда вам нужно, чтобы ajax-запрос был завершен до того, как браузер перейдет к другому коду

Richard Deeming

Вы должны избегать использования async флаг, так как он заставляет браузер зависать во время обработки запроса.

Попробуйте использовать cache:false чтобы увидеть, кэшируется ли ответ.

Member 12697982

Привет, спасибо (кэш: false) сработало

1 Ответов

Рейтинг:
2

Richard Deeming

Как обсуждалось в комментариях, это проблема кэширования. Добавление cache:false чтобы вызов AJAX обошел проблему.

$.ajax({
    type: "GET",
    url: "/CreateApplicationFromSearch/CreateApplicationFromSearch",
    contentType: "application/json; charset=utf-8",
    cache: false, // <-- Prevent the request from being fulfilled from the cache
    ...

на jQuery."Аякс" () | библиотека jQuery API документация[^]

Другие варианты включают использование пользовательского атрибута в действии для отключения кэширования браузера:
c# - предотвращение кэширования в ASP.NET MVC для конкретных действий с использованием атрибута-переполнение стека[^]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class NoCacheAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
        filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        filterContext.HttpContext.Response.Cache.SetNoStore();

        base.OnResultExecuting(filterContext);
    }
}

...

[HttpGet]
[NoCache]
[AllowAnonymous]
public ActionResult CreateApplicationFromSearch(...)

Или изменение действия для использования POST запрос, который никогда не будет кэширован.
[HttpPost]
[AllowAnonymous]
public ActionResult CreateApplicationFromSearch(...)
$.ajax({
    type: "POST",
    url: "/CreateApplicationFromSearch/CreateApplicationFromSearch",
    contentType: "application/json; charset=utf-8",
    ...

Некоторые методы HTTP должны приводить к тому, что кэш делает объект недействительным. ... Эти методы являются:
  • КЛАСТЬ
  • УДАЛИТЬ
  • ПОСТ