Tengo un Asp.net-MVC que cuando envío la solicitud devuelve una partial-view .
public ActionResult AccountDetails() { return PartialView("~/Views/partials/Account/Details.cshtml"); }Luego cargo parcial en mi formulario usando el código a continuación.
var condition = true; var pageNumber = 0; for (var i = 1; i < 10; i++) { $("#page_view" + i).addClass("d-none"); if (condition && $("#page_view" + i).html().trim() == "") { pageNumber = i; condition = false; } } $("#page_view" + pageNumber).removeClass("d-none"); $.ajax({ url: url, type: "GET", async: true, success: function (result) { $("#page_view" + pageNumber).html(result); } });En mi archivo html principal, solo uso un enlace para obtener la página y cargarla:
<a href="javascript: load_main_form('Account/Details');">DetailsPage</a>En este método, el problema es cuando cargo y cierro una página varias veces. Javascript de esa página se almacena en caché por cada carga y algunas funciones o eventos se ejecutan varias veces por cada carga.
ajaxComplete para saber cuántas veces lo almacena en caché.
¿Cómo puedo borrar el caché o reescribir en el último? O incluso si hay una forma más rápida de hacerlo, estaré agradecido por compartirla.
Voy a abordar tu pregunta en pasos.
El caché no hace que el código se ejecute varias veces. El caché solo afecta cómo se carga el código. Si intenta cargar un js varias veces, el caché solo afectará el lugar donde el navegador buscará ese archivo, ya sea la web (si no está en caché) o el caché local. Su navegador nunca ejecutará ningún código solo porque está en el caché, se ejecutará porque usted lo solicitó (intencionalmente o no).
Lo más probable es que haya un código javascript destinado a ejecutarse una vez dentro de una de esas vistas que está cargando. Entonces, si tiene un código destinado a ejecutarse una vez, debe colocarse en el archivo que carga el resto de las vistas (generalmente llamado diseño o base)
Cualquier javascript presente en cualquiera de las vistas, debe ser específico para esa vista. Entonces, para depurar eso, vaya a cualquier vista que cause problemas y vea si el javascript está allí, si es así, busque el origen (tal vez desde el diseño, tal vez otra vista parcial dentro de esa vista parcial, o en algún lugar)
Vea la imagen de abajo para entender lo que quiero decir 
Ahora finalmente
Sí, puede evitar que el código se ejecute varias veces, le explicaré cómo, pero le aconsejo que primero arregle la estructura de su proyecto y solo use esto en los casos en que la estructura no pueda cambiar, ya que de lo contrario sería como poner pintura encima del grietas
Digamos que tienes algo de código:
let myCounter = 0; myCounter ++; console.log(`Hey! I've run ${myCounter} times`);luego, dentro de la vista parcial, cambie el código y envuélvalo en una función junto con una declaración que verifique si eso ya se ejecutó (le da un nombre, digamos inicializador, y luego...)
!window.initializator && (initializator = true) && (function() { let myCounter = 0; myCounter++; console.log(`Hey! I've run ${myCounter} times`); })()ahora, no importa cuántas veces el navegador ejecute este fragmento de código, nunca ejecutará las instrucciones dentro más de una vez, porque deja una variable en el alcance global que asegura que si el código se ejecuta nuevamente, el código se omitirá .
También puedes usar otro objeto en lugar de ventana (lo cual recomiendo mucho, porque nunca debes usar variables globales si puedes evitarlas) pero pongo el ejemplo así por si no tienes control del flujo de tu código , tampoco puede asegurarse de tener un objeto instanciado antes.