2011-11-16 17 views
11

Tengo una aplicación de rieles y sigo teniendo un comportamiento extraño con las solicitudes pjax. Cuando miro en mis registros de desarrollo pude ver que se están realizando dos solicitudes. La primera solicitud es pjax y la siguiente no. Como resultado, la página aún se recarga.solicitud jquery pjax enviando dos veces

Agradezco si alguien me puede ayudar con esto.

+2

Necesitamos ver más que una explicación escasa de su pregunta. Por favor, publique un código relevante, archivos de registro u otras cosas. – Bojangles

+0

Me encuentro con el mismo problema. Tengo un ejemplo disponible [aquí en cloudfoundry] (http://scaffolding.cloudfoundry.com/book/list). Los enlaces de paginación y clasificación de tablas deben ser pjax, pero con Firebug puede observarlos haciendo una solicitud XHR seguida de una actualización completa de la página. El código fuente de la aplicación que se ejecuta allí es [aquí en GitHub] (https://github.com/robfletcher/grails-enhanced-scaffolding/tree/pjax) probablemente el archivo relevante sea 'grails.list.js' –

+1

con Firebug Establecí que en mi caso el controlador de éxito predeterminado de pjax no puede encontrar ningún contenido utilizando el selector de fragmentos que le he dado. En cuanto a [el código pjax] (https://github.com/defunkt/jquery-pjax/blob/master/jquery.pjax.js#L106) en ese caso se realizará una actualización de página completa. No estoy seguro de por qué el selector no funciona, ya que la respuesta de AJAX parece estar bien y el selector es válido. –

Respuesta

14

El plugin JQuery pjax tiene un controlador de error predeterminado, que simplemente recargará la página de destino. Este controlador de errores se llama cuando ha transcurrido el tiempo de espera, que pjax establece muy bajo. Como resultado, si su solicitud toma demasiado tiempo, verá dos solicitudes idénticas. La solicitud de pjax (probablemente con el conjunto de atributos _pjax), seguido de otra solicitud que no sea pjax. En el navegador, es probable que vea una página completa de recarga.

Una cosa que encontré en mi situación, fue que la respuesta en sí misma no llevaba tanto tiempo. Sin embargo, el HTML que se devolvió incluía una incrustación flash. No estoy seguro de si el código pjax obtiene su respuesta antes o después de que se cargue la memoria flash.

Para resolver el problema, he cambiado mi código PJax para parecerse ...

$.pjax({ 
     url: xhr.getResponseHeader('Location'), 
     container: '#container', 
     timeout: 4000 // pick a suitable timeout 
     }); 

Por supuesto, esto está llamando pjax directamente. Si no lo está llamando directamente, tendrá que encontrar una solución similar.

+0

me salvó la vida! :) No fue enviar dos solicitudes, sino simplemente cancelar la primera y luego volver a cargar ... De todos modos, ¡funciona perfectamente! –

1

También he corrido en este tema, parece que es un problema relacionado con el almacenamiento en caché del navegador. Me di cuenta de que si borraba el historial y la memoria caché, deja de suceder en Chrome. Todavía no he podido resolverlo, pero me imagino que tiene algo que ver con la desactivación del almacenamiento en caché del navegador.

+1

Resulta que mi problema era que la solicitud se estaba agotando. Pasando tiempo de espera: 2000 en la función pjax lo arregló para mí. También encontré un contenedor pjax vacío en parte de mi diseño. Cuando navegué hacia ese fragmento estaba dando un error en la consola del navegador. Pude arreglarlo poniendo un elemento span vacío en él. – andrewajo

Cuestiones relacionadas