我正在嘗試使用ajax來展開和摺疊每一行的選項。如何使用link_to跟蹤ajax調用:remote => true
我正在使用link_to :remote => true
並且正常工作,問題是當我多次點擊時,所有的通話都保持活動狀態。我想知道如何跟蹤這些電話,並在用戶崩潰或他請求新電話時丟棄它們。由於我沒有讓$ .ajax呼叫我的自我,我不知道該怎麼做。
這是我的代碼。
index.html.haml
:
%tr{ :class => 'cmp_row'}
%td
= link_to "+", user_company_details_path(company_id), :remote => true , :method => :post, :cache => false, :class => "cmp_exp_link", :id => "#{company_id}
application.js.erb
:
$('.cmp_exp_link').click(function (e) {
var cmp_id = e.target.id
if($(this).text() === "+"){
$("<tr id='details_row_"+cmp_id+"'><td colspan = 11 id='details_cell_"+cmp_id+"' style='text-align:center' > </td> </tr>").insertAfter($(this).closest(".cmp_row"));
$("#details_cell_"+cmp_id).html("<img src='/assets/colorbox/loading.gif' >")
$(this).text("-");
}else{
$(this).text("+");
$("#details_row_"+cmp_id).remove();
return false;
}
});
company_details.js.erb
// remove the loading icon
$("#details_cell_<%= params[:cmp_id] %>").html("");
// load partial
$("#details_cell_<%= params[:cmp_id] %>").html("<%= escape_javascript(render(:partial => "company_details", :locals => { :results => @results })) %>");
user_controller.rb
def company_details
@results = @data
respond_with(@results)
end
非常感謝!
你可以嘗試通過添加一個onclick處理程序:'if(ajax){ajax.abort();}'?看看這個也http://stackoverflow.com/questions/8878115/how-to-stop-previous-ajax-call-sent-in-jquery – MrYoshiji
我不認爲你真的需要擔心這個:當你擴展一行,你使用ajax來填充它,但在那之後,你只會崩潰並正常擴展它,不是嗎?也就是說,您只需要每行執行一次ajax加載:當擴展時,您可以查看該行中是否有任何內容,如果它是空的,請執行ajax調用,如果它被填充,則只顯示內容。 –
感謝您的幫助,但在螢火蟲上,我看到所有的呼叫加載,我不想創造額外的流量需要,表格會很長,也許每個電話會檢索大量的記錄。我只想不加載重複的呼叫,或者如果用戶摺疊了,然後停止當前的呼叫。 – Alejandra