2010-09-25 17 views
17

ho un po 'chiamata AJAX che chiama rotaie:Semplicemente tornando successo o il fallimento di chiamata AJAX in rotaie

$.ajax({ 
     type: "POST", 
     url: '...', 
     data: ({ ... 
       }), 
     success: function(response, status) { 
        console.log(status); 
     } 
    }); 

Nel controllore rotaie Sto semplicemente cancellando una voce dal database, e ho semplicemente voglia di tornare se ha avuto successo o meno. Qual è il modo migliore?

Devo restituire JSON in risposta a? In tal caso, cosa vorresti che contenesse?

risposta

25

modo migliore per significare il successo in questo modo è quello di inserire il seguente nel controller ...

def destroy 
    # ... your code ... 
    respond_to do |format| 
    format.json { head :ok } 
    end 
end 
+4

grazie! per la cronaca, per un errore potrebbe essere qualcosa del tipo: format.json {render: json => @ obj.errors,: status =>: unprocessable_entity} – 99miles

+1

Ho letto che il ritorno ok potrebbe non funzionare: http: // StackOverflow .com/questions/4791499/jquery-doesnt-call-success-method-on-ajax-per-rails-standard-rest-delete-answer – lulalala

+0

Stavo usando 'format.json {head: no_content}' come io don ' t voglio inviare qualsiasi dato. Ma il browser stava cercando di reindirizzare a un URL dopo un successo ajax, che è inaspettato. L'ho sostituito con 'format.json {head: ok}' e il reindirizzamento non necessario è andato via. –

0

Quando si esegue la query, potrebbe essere restituito un codice che indica che è stato eseguito correttamente per confermare che la riga è stata eliminata. Quindi puoi restituirlo solo per assicurarti che anche la query sia stata eseguita correttamente insieme alla chiamata ajax.

+0

Giusto, so se la mia query ha avuto esito positivo o no, ma come suggerisci di restituirlo? Ad esempio: format.json {"false"} o render: nothing => true, o ..? – 99miles

2

Ho trovato questo modo più breve per fare il lavoro:

def destroy 
    # ... your code ... 
    head :ok # this will return HTTP 200 OK to jQuery! 
end 
+0

Restituisce da 200 a jQuery insieme a un singolo spazio nella risposta. jQuery non lo interpreta come un successo. Quindi restituirà il successo ma non chiamerà il callback di successo. – JaeGeeTee

+0

Wow, questo è stato effettivamente corretto. Sono corretto! – JaeGeeTee

3

provare questo è lavoro per me

def destroy 
    ...   
    render json: {}, status: 200 
end 
Problemi correlati