Ich benutze jQuery Sortable, um Karten zwischen Listen wie Trello zu ziehen. Wenn der Benutzer die Interaktion mit einer Karte beendet hat, muss ich alle Karten in dieser Liste speichern.Mehrere Datensätze gleichzeitig mit einer einzigen AJAX-Anfrage speichern?
Ich mache es derzeit mit einer jeden Schleife, Schleifen über alle Elemente dieses Typs und speichern jedes mit einer AJAX-Anfrage.
ui.item.parent('.js-CardsContainer').children('.js-CardContainer').each(function() {
var list_id = $(this).closest('.js-List').data('id');
var order = $(this).index();
var id = $(this).find('.js-Card').data('id');
console.log(order);
$.ajax({
url: "/cards/" + id,
type: "PATCH",
data: {
card: {
list_id: list_id,
order: order
}
},
success: function(resp) {
//
}
});
});
Es scheint für Listen mit nur ein paar Karten zu arbeiten. Aber wenn 5+ Karten gespeichert werden, scheitern einige. Ich nehme an, das liegt daran, dass separate AJAX-Anfragen für jede Karte verwendet werden?
Also, ich denke, ich muss alle AJAX-Anfragen in einer einzigen Anfrage kombinieren? Ich habe keine Ahnung, wie das geht. Kann jemand helfen?
Das wird meiner Controller Update-Aktion, die wie folgt
def update
@card = Card.find(params[:id])
if @card.update_attributes(shared_params)
respond_to do |format|
format.js {}
format.json { render json: @card, status: :created, location: @card }
end
else
render :edit
end
end
Wäre die URL dann "/ cards" anstelle von "/ cards /" + id? – colmtuite
Ja - das wäre genauer. Ich habe die Antwort aktualisiert. –
Danke Rory, weißt du, wie ich die serverseitige Logik aktualisieren konnte? Ich verwende Rails, ich habe meine Controller-Logik zu der Frage hinzugefügt. – colmtuite