jquery – Rails 4如何捕获ajax:成功事件

前端之家收集整理的这篇文章主要介绍了jquery – Rails 4如何捕获ajax:成功事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Rails 4.0上.

我正在发送这样的事件(请注意:remote => true):

<%= button_to 'yes',{controller:'videos',action:'rate',id: video.hashed_id,yesno:'yes'},{:remote=>true,:class=>"rate-btn yes-btn btn btn-default btn-sm"} %>

我的控制器看起来像这样:

def rate
    video = Video.find_by( hashed_id: params[:id])
    action  = params[:yesno]
    puts video.hashed_id
    puts action

    respond_to do |format|

      if (action=='yes') 
        new_rating = video.rating==1 ? 0 : 1 
        video.update( is_new:0,rating: new_rating )
        format.html { redirect_to controller:'projects',action: show,id: video.project.hashed_id }
        format.json { head :no_content }
        format.js { render :nothing=>true }

      end    

      if (action=='no') 
        new_rating = video.rating==-1 ? 0 : -1
        video.update( is_new:0,id: video.project.hashed_id }
        format.json { head :no_content }
        format.js { render :nothing=>true }
      end

    end

  end

我有点使用format.json / format.html,因为我不完全理解应该从AJAX请求应用哪一个.

在视图上(按钮所在的位置)我有这个:

$(document).ready( function($) {
        console.log('ready');
    $(document).ajaxSuccess( function(data) {alert(data);} )
    $(document).ajaxError( function(data) {alert(data);} )
    $('.rate-btn').closest('form').on('ajax:success',function() {
      console.log('ajax:success!');
    });

    $('.button_to').bind("ajax:success",function() {
    console.log( 'test' );
    });

});

单击按钮后,我在控制台中做好了准备,但无论我做什么,我都无法在控制台中显示测试.我错过了什么?

更新:

我在观看/log/development.log时尝试点击按钮,这就是我所看到的:

Started POST "/videos/rate/lq7lv3218c/yes" for 127.0.0.1 at 2013-08-29 17:14:59 -0400
Processing by VideosController#rate as JS
  Parameters: {"authenticity_token"=>"es4wPqFrxxxxxFsbHQR/gAzofDC+ZwYsiiJ7RAQZUHk=","id"=>"lq7lv3218c","yesno"=>"yes"}
  [1m[36mVideo Load (0.3ms)[0m  [1mSELECT `videos`.* FROM `videos` WHERE `videos`.`hashed_id` = 'lq7lv3218c' LIMIT 1[0m
  [1m[35m (0.1ms)[0m  BEGIN
  [1m[36msql (0.3ms)[0m  [1mUPDATE `videos` SET `rating` = 0,`updated_at` = '2013-08-29 21:14:59' WHERE `videos`.`id` = 18[0m
  [1m[35m (0.3ms)[0m  COMMIT
  Rendered videos/rate.html.erb (0.0ms)
Completed 200 OK in 7ms (Views: 2.0ms | ActiveRecord: 1.1ms)

我是一个轨道n00b,但它看起来不错.

解决方法

button_to帮助程序围绕提交按钮构建表单.表单是接收数据远程属性内容(参见: http://apidock.com/rails/ActionView/Helpers/UrlHelper/button_to).所以,我试试这个:
$('.rate-btn').closest('form').on('ajax:success',function() {
  console.log('ajax:success!')
});

因为你在Rails 4.0上,我猜你是在使用jQuery 1.9.对事件的约束似乎在那里发生了一些变化.如果这对你有用,那么这可能是它的一部分.从1.7开始,使用.on()进行事件绑定比.bind()更受欢迎.

猜你在找的jQuery相关文章