rails instalar jquery ruby-on-rails-3 ujs

jquery - instalar - Rails 3 UJS: el controlador recibe dos llamadas de link_to: remote



rails jquery ajax (11)

Tengo un problema extraño donde JQuery está creando dos solicitudes AJAX para un método link_to. Estoy desarrollando una aplicación de Rails 3 con JQuery para UJS. Tengo un enlace de alternar que alterna entre ''Seguir'' y ''Dejar de seguir''

Mi enlace se muestra como a continuación:

<span id="follow_link"> <a href="/tfollow_artist?id=8103103" data-method="post" data-remote="true" id="follow_artist" rel="nofollow">Unfollow</a> </span>

y mi controlador está configurado así:

def tfollow_artist @artist = Artist.find(params[:id]) if current_user.following?(@artist) current_user.stop_following(@artist) else current_user.follow(@artist) end end

que finalmente rinde un js como:

$(''#follow_link'').html(''<%= escape_javascript(render :partial => "follow") %>'');

Que esencialmente reemplaza los contenidos html de ''<span id = "follow_link"> ... </ span> con la misma URL solo con el texto diferente. Por ejemplo, arriba se representará como:

<span id="follow_link"> <a href="/tfollow_artist?id=8103103" data-method="post" data-remote="true" id="follow_artist" rel="nofollow">Follow</a> </span>

Sin embargo, esto de alguna manera hace que JQuery haga dos solicitudes AJAX.

¿Alguien puede ver lo que está mal aquí?

Estoy usando la gema ''jquery-rails'' que está copiando el último archivo jquery-ujs en mi aplicación. La versión de JQuery es 1.4.3


Los archivos JavaScript que desee como: valores predeterminados (application.js siempre se incluye).

config.action_view.javascript_expansions[:defaults] = %w(jquery rails)

La línea comentada está diciendo claramente que application.js siempre está incluido. En mi aplicación, he agregado la aplicación por defecto. Entonces para ajax .submit estaba creando dos registros en mi aplicación.


Basándose en la respuesta de Eugene, tenga en cuenta que si se está desarrollando después de haber precompilado localmente sus activos para la producción, como ...

bundle exec rake assets:precompile RAILS_ENV=production

... a medida que continúe con el desarrollo, Rails AssetPipeline querrá servir tanto sus activos no compilados como los compilados.

Una forma de solucionarlo es con la tarea de rastrillo estándar de Eugene''s Rails. Otra forma es simplemente quitando esos molestos activos precompilados listos para producción con algo como

$ rm -rf #{Rails.root}/public/assets


Creo que lo que está sucediendo es que tu JavaScript no impide que el navegador ejecute el enlace. Entonces obtienes la solicitud AJAX y luego la solicitud del navegador.

Hay una explicación y solución para esto en Rails Cast 174. Explicación del texto here , aproximadamente 3/4 de la página abajo.


Estaba teniendo el mismo problema: solicitudes duplicadas al usar: remote => true. Mi problema se debía al uso de Heroku y a los recursos de precompilación. Estoy precompilando activos antes de implementar en Heroku (activos de rake: precompilación). Esto esencialmente crea una copia duplicada de su canalización de activos en su carpeta pública. Así que sucedía lo mismo que menciona Docunext: había múltiples archivos javascript manejando cada solicitud.

Se soluciona si elimino los activos en el directorio público cuando trabajo localmente (git rm -rf public / assets). Después de eliminar los activos del directorio público, dejó de enviar varias solicitudes


Gracias a este diálogo:

https://github.com/rails/jquery-ujs/issues/208

Pude descubrir que jquery y jquery_ujs se incluían dos veces.

Supongo que la gema jquery-rails los coloca automáticamente en application.js, y luego los incluí en application.js también.

Parece que, por cualquier razón, application.js agrupa automáticamente todo en la aplicación / assets / javascripts / - incluso cuando elimino todos los requisitos.

Por lo tanto, si sus formularios: remote => true se envían dos veces, intente marcar application.js.

¡Espero que esto ayude!

ACTUALIZACIÓN: creo que esto podría haber tenido algo que ver conmigo al preprocesar mis activos sin usar un resumen, entonces cuando mi entorno de desarrollo agrega etiquetas de script en el encabezado html dinámicamente desde los requisitos en app / assets / application.js, también agrega uno para lo que debería ser una aplicación dinámica vacía.js, excepto que se carga el estático de public / assets. ¿Confuso? ¡Sí!


Me enfrenté al mismo problema ahora. revisé todos los cambios de código e intenté con otras cosas pero fue en vano. finalmente borró el caché del navegador. eso ayudó.


Pruebe este código ... para evitar clics dobles en enlaces remotos.

$(''a[data-remote=true]'').live(''ajax:before'', function () { if ($(this).attr(''ajax-loading'')) { return false; } else { $(this).attr(''ajax-loading'', true); } }).live(''ajax:complete'', function () { $(this).removeAttr(''ajax-loading''); });

Gist


Si no puede averiguar dónde se carga dos veces el archivo ujs, simplemente copie este código en rails.js / application.js (preferiblemente no aquí)

var alreadyInitialized = function() { var events = $(document).data(''events''); return events.click && $.grep(events.click, function(e) { return e.namespace === ''rails''; }).length; } if ( alreadyInitialized() ) { $.error(''jquery-ujs has already been loaded!''); }


También para mí el mismo problema: dos veces XMLHttpRequest en un link_to ...: remote => "true"

Lo he resuelto, en

locals / application.rb :

comentando

// config.assets.paths << Rails.root.join (''proveedor'', ''assets'', ''stylesheets'', ''javascripts'')

y descomentar

config.action_view.javascript_expansions [: defaults] =% w (aplicación jquery jquery-ui)

luego me olvidé de hacer después de mi último git pull. Espero ayudar a alguien


Tuve el mismo problema, reparado al comentar esta línea

/#config.assets.debug = true

en modo de desarrollo


Tuve un problema similar. Ejecutar las siguientes tareas de rake resolvió mi problema.

rake tmp:clear rake assets:clean