Jestem na Rails 4.0.Rails 4, jak złapać ajax: zdarzenie powodzenia
jestem wysyłając wydarzenie jak to (uwaga: zdalne => 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"} %>
Mój kontroler wygląda następująco:
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
mam niby to z winging format.json/format.html, ponieważ nie w pełni rozumiem, które z nich należy stosować z żądaniem AJAX.
Z widokiem (gdzie przycisk życie) mam to:
$(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');
});
});
Po kliknięciu przycisku, mam ready
w konsoli, ale bez względu na to, co robię, nie mogę dostać się do test
pojawią się w konsoli. czego mi brakuje?
Aktualizacja:
Próbowałem kliknięcie przycisku podczas oglądania /log/development.log i to co widzę:
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)
Jestem szyn n00b ale wygląda OK, aby mnie.
Hm. Czego używa? Czy mogę skonfigurować go tak, aby używał jQuery? – emersonthis
Wiążesz ajax: sukces na elemencie HTML odtwarzacza wideo, który nie jest przyciskiem, który "uruchomił" żądanie, wykonaj wiązanie na przycisku zamiast tego: – MrYoshiji
Próbowałem tego i nadal nie działa: '\t $ ('. rate-btn'). bind ("ajax: success", function() { \t \t console.log ('test'); \t}); ' – emersonthis