当前位置: 首页 > 工具软件 > jQuery-UJS > 使用案例 >

rails4 ajax 例子,jquery - Rails 4 how to catch ajax:success event - Stack Overflow

阳航
2023-12-01

I'm on Rails 4.0.

I'm sending an event like this (note the :remote=>true):

true, :class=>"rate-btn yes-btn btn btn-default btn-sm"} %>

My controller looks like this:

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, 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

end

end

I'm kind of winging it with the format.json/format.html because I don't fully understand which one should apply from an AJAX request.

On the view (where the button lives) I have this:

$(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' );

});

});

After clicking the button, I get ready in the console, but no matter what I do I can't get the test to show up in the console. What am I missing?

Update:

I tried clicking the button while watching /log/development.log and this is what I see:

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)

I'm a rails n00b but it looks ok to me.

 类似资料: