Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

181
Views
Cómo evitar que el código Javascript se ejecute varias veces debido al almacenamiento en caché

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.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Voy a abordar tu pregunta en pasos.

1. "El código Javascript se ejecuta varias veces debido al almacenamiento en caché"

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 ingrese la descripción de la imagen aquí

Ahora finalmente

2. "Cómo evitar que el código Javascript se ejecute varias veces"

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.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!