He estado experimentando un problema intermitente en mi aplicación Rails, y estoy teniendo problemas para averiguar qué está pasando. Cuando el usuario inicia sesión, ve un tablero que contiene algún código JavaScript que realiza una llamada AJAX a una acción. Ocasionalmente, en lugar de ver el tablero, cuando el usuario inicia sesión, ve el texto de respuesta JSON de la acción en lugar del panel de control (en Chrome) o descarga un archivo .json (Firefox). Es intermitente y no suele suceder, pero es realmente molesto cuando ocurre.El navegador a veces muestra texto JSON en lugar de la página deseada
Aquí hay una versión callados de una parte del código:
JS corriendo en la cabeza plantilla:
$(function() {
var remoteLink = $('#remoteLink');
remoteLink.live("ajax:complete", function() {
setTimeout(function() {
loadCount();
}, 30000);
});
loadCount();
function loadCount() {
remoteLink.click();
}
});
Y el eslabón de la plantilla:
<%= link_to 'get count (hidden)', {:controller => 'something', :action => 'count'},
:id => 'remoteLink', :class => 'hidden', :remote => true, 'data-type' => 'json' %>
y el controlador acción:
def count
render :json => get_counts_function_returning_a_hash
end
Mi corazonada es que es una condición de carrera, ¿quizás relacionada con el uso de setTimeout? - pero no he podido verificar esa corazonada. ¿Alguien puede decirme qué podría estar pasando aquí? También he visto esto en la naturaleza en otros sitios, también intermitente, generalmente no ocurre, pero molesto cuando sucede.
Oh, muy interesante. No estamos usando store_location específicamente, pero tenemos nuestra propia implementación de algo similar. Investigaré y aceptaré esta respuesta si eso es lo que está sucediendo. – Jeff
¡Tú ganas! Ese fue mi problema Estaba grabando la URL de solicitud de AJAX y reenviéndola al usuario después de iniciar sesión. Si el usuario cerró la sesión mientras el JS todavía estaba sondeando el servidor, y el usuario regresó a la página de inicio de sesión sin hacer clic en ningún otro enlace en la aplicación, este problema podría ocurrir. – Jeff