我正在使用我的rails 4演示應用程序,並且我有一個按鈕用於在服務器端執行一些操作,然後返回json
並顯示成功或失敗消息。rails 4 ajax event not triggering success
與this問題類似,我看到響應返回了200代碼和期望的json
有效載荷,但未觸發jQuery成功事件 - 使其更加混亂,似乎有些時斷時續 - 有時我會得到適當的操作(顯示一條閃光消息並刪除一個div),但大多數時候沒有任何反應。
下面是在視圖中按鈕:
<%= link_to 'Do Work', widget_path(:id => widget.id), id: widget.id, remote: true, method: :get %>
這裏的控制器:
respond_to do |format|
if widget.save
// this json is returned properly
format.json { render json: { status: 'success', msg: 'Widget created.', :content_type => 'text/json', type: 'info', item: 'widget' } }
else
format.json { render json: @user.errors, :content_type => 'text/json', status: :unprocessable_entity }
end
end
在application.js
的JavaScript:
var fade_flash = function() {
$("#flash_success").delay(2000).fadeOut("slow");
$("#flash_info").delay(2000).fadeOut("slow");
$("#flash_warning").delay(2000).fadeOut("slow");
$("#flash_danger").delay(2000).fadeOut("slow");
};
fade_flash();
var show_ajax_message = function(msg, type) {
$("#notice").html('<div id="flash_'+type+'" class="alert alert-dismissable alert-'+type+'"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>'+msg+'</div>');
fade_flash();
};
這裏的的CoffeeScript在widget.js.coffee
:
$ ->
$("a[data-remote]").on "ajax:success", (e, data, status, xhr) ->
alert('got here')
console.dir(data)
if data.status == 'success'
show_ajax_message(data.msg, data.type)
if data.item == 'widget'
$('#widget_'+this.id).hide('slow')
我通常不使用這些事件,所以我不熟悉它。將事件綁定到「文檔」而不是鏈接時會發生什麼(如https://api.jquery.com/Ajax_Events/中所述? – jvnill