Me estoy encontrando con un problema bastante extraño. Cuando se carga la página web, ejecuto automáticamente una solicitud jQuery GET en un script PHP interno que esencialmente imprime una salida JSON desde una aplicación de back-end.
jQuery
$.get(urls.validateSession, function(data){ console.log(data); //For debugging var response = JSON.parse(data); //Do more things with returned data });PHP
<?php include 'include/backend.php'; //Send POST request to backend application $response = sendPostRequest($urls->session->validate, json_encode($defaultRequest)); /* sendPostRequest Function Definition */ /* function sendPostRequest($url, $data){ $curl = curl_init($url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); curl_close($curl); return $response; } */ echo $response; ?>Esto funciona como se esperaba en mi servidor xampp local e imprimirá una salida JSON en la consola similar a la siguiente:
{ "status":"SUCCESS", "time":"02-21-2022 02:14:03", etc... }Aunque cuando ejecuto este mismo código en un servidor apache remoto, en lugar de jQuery ejecutando la solicitud GET cada vez que se carga la página web y escribiendo los datos recibidos en la consola, jQuery no ejecutará la solicitud GET nuevamente y escribirá los datos recibidos de la anterior Solicitud GET a la consola. Casi como si el resultado anterior de la solicitud GET se almacenara en caché y se usara nuevamente para la solicitud posterior.
Sé que jQuery no está ejecutando la solicitud GET cada vez que se vuelve a cargar la página porque el campo "tiempo" en la salida JSON siempre permanece igual. Además, no veo solicitudes posteriores que lleguen a la aplicación de back-end. Entonces, jQuery no se molesta en hacer una nueva solicitud GET para obtener nuevos datos, y solo usa el resultado anterior.
Aunque cuando fuerzo la actualización de la página web (Shift + F5), esto parece obligar a jQuery a ejecutar la solicitud GET nuevamente, y la nueva salida JSON esperada con una marca de tiempo actualizada se escribe en la consola.
¿Alguna idea de lo que podría estar pasando aquí?
SOLUCIÓN
Las solicitudes Ajax GET tienen el almacenamiento en caché habilitado de forma predeterminada. Agregar el siguiente código al comienzo de los archivos JS deshabilita el almacenamiento en caché para todas las siguientes solicitudes ajax.
$.ajaxSetup({ cache: false });Creo que esta pregunta anterior podría ayudarlo a obtener el resultado deseado. El caché del método JQuery get() está, por defecto, establecido en true .
caché (predeterminado: verdadero, falso para dataType 'script' y 'jsonp')
Y parece que sus resultados se almacenan en caché, por eso no se molesta en ejecutar la función cada vez que se carga una página.
Puede ver más configuraciones de ajax aquí
El fragmento de @KevinB en la pregunta vinculada:
$.get({ url: url, cache: false }).then(function(rdata){ console.log(rdata); });