Soy bastante nuevo en todo el asunto de "Service Worker" (sí, lo sé, casi 2022 y recién me meto en eso).
Estoy tratando de usarlo para almacenar en cache las respuestas de algunas solicitudes, pero como probablemente sepa, no puede almacenar en caché una solicitud POST.
Sabiendo esto, lo almacenaré en caché de otra manera, pero quiero estar seguro de que tengo que almacenarlo en caché, y para esto necesito saber cuál es el valor del parámetro "datos" del método jQuery.ajax() utilizado. en el origen de la activación de búsqueda.
De hecho, no puedo averiguar cómo recuperar el parámetro de datos con el objeto de event , ni el event.request uno. Hasta ahora pude hacer esto:
self.addEventListener('fetch', function(event) { const requestUrl = new URL(event.request.url); event.respondWith( caches.match(event.request) .then(function(response) { if(response) { console.log('return cache '+requestUrl.href); return response; } console.log('return classic + save'); return fetch(event.request).then(function(response) { if(!response || response === undefined || response.status === undefined || response.status !== 200 || response.type !== 'basic') { return response; } var respToCache = response.clone(); caches.open('thiscache').then(function(cache) { console.log('cache opened, saving...'); cache.put(event.request, respToCache) .then() .catch(function(error) { console.log('catcherror: '+error); if(event.request !== undefined && event.request.method !== undefined && event.request.method == 'POST') { // Here, I need to get the 'data' parameter from the jQuery.ajax() method in the origin of the fetch } }) }) .catch(function(error) { console.log('Error ! '+error); }) return response; }) }) ); });No puedo encontrar el método correcto para recuperar estos datos; gracias por su ayuda y cualquier consejo que pueda tener.
Editar:
Para obtener información, aquí hay un ejemplo de jQuery.ajax() que activa la recuperación del trabajador del servicio:
jQuery.ajax({ url: './ajax.php', type: 'POST', dataType: 'html', xhrFields: { withCredentials: true }, data: 'param1=value1¶m2=value2...', // <-- this is what I want to get success: function(reponse, statut) { ... } });Lo encontré ! Para realizar eso, debe .formData() el event.request (un clon de él en realidad), que le dará todos los parámetros y sus valores contenidos en el parámetro de data .
self.addEventListener('fetch', function(event) { var requestClone = event.request.clone(); event.respondWith( caches.match(event.request) .then(function(response) { if(response) { console.log('return cache '+requestUrl.href); return response; } console.log('return classic + save'); return fetch(event.request).then(function(response) { if(!response || response === undefined || response.status === undefined || response.status !== 200 || response.type !== 'basic') { return response; } var respToCache = response.clone(); caches.open('thiscache').then(function(cache) { console.log('cache opened, saving...'); cache.put(event.request, respToCache) .then() .catch(function(error) { console.log('catcherror: '+error); if(event.request !== undefined && event.request.method !== undefined && event.request.method == 'POST') { requestClone.formData().then(formData => { // Do whatever you want with formData, parameters are here :) } } }) }) .catch(function(error) { console.log('Error ! '+error); }) return response; }) }) ); });