Quando l'utente fa clic su un elemento specifico, io uso jQuery's post method aggiornare qualcosa nel database:Come fallire la richiesta Ajax in Rails?
$.post("/posts/" + post_id + "/update_something",
{ some_param: some_value },
success_handler);
dove update_something
assomiglia a questo:
def update_something
post = Post.find(params[:id])
post.update_attributes(:some_field => params[:some_param])
render :nothing => true
end
Il problema è che se update_attributes
fallisce, la richiesta riesce ancora e success_handler
viene eseguito.
Come è possibile causare il fallimento della richiesta quando update_attributes
non riesce a eseguire success_handler
?
Grazie! Non avevo familiarità con i metodi 'success' e' error' di jQuery. Ho cercato di cercare documenti ma nessun successo. Potresti fornire un puntatore per favore? –
+1 Potresti anche solo restituire un'intestazione riuscita/fallita. La tua ultima riga in Rails sembrerebbe un successo? : ok:: internal_server_error', dove 'head: ok' restituirà lo stato 200 e' head: internal_server_error' restituirà lo stato 500. – Substantial
Misha: 'post',' get' e 'ajax' restituiscono un oggetto jqXHR che è (male) [documentato qui] (http://api.jquery.com/jQuery.ajax/#jqXHR). Leggendolo più da vicino ho notato che 'error' e' success' sono deprecati e ora dovresti usare [Deferred] (http://api.jquery.com/category/deferred-object/) 'done' e' fail' . Ho aggiornato il mio codice per rispecchiare questo, oltre a incorporare il consiglio di @ gg_s, che è un buon consiglio. –