2010-09-25 13 views
17

tengo una pequeña llamada AJAX que llama rieles:Simplemente volviendo éxito o el fracaso de la llamada AJAX en los carriles

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

En el controlador de rieles Estoy simplemente borrar una entrada de la base de datos, y yo simplemente quieren regresar si fue exitoso o no. ¿Cuál es la mejor manera?

¿Debería devolver JSON en responder_a? Si es así, ¿qué es exactamente lo que quieres que contenga?

Respuesta

25

La mejor manera para significar el éxito en esta forma es poner lo siguiente en su controlador ...

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

gracias! para el registro, para una falla, podría ser algo así como: format.json {render: json => @ obj.errors,: status =>: unprocessable_entity} – 99miles

+1

He leído que el solo hecho de regresar bien puede no funcionar: http: // stackoverflow .com/questions/4791499/jquery-doesnt-call-success-method-on-ajax-for-rails-standard-rest-delete-answ – lulalala

+0

Estaba usando 'format.json {head: no_content}' como no lo hago Quiero enviar cualquier información. Pero el navegador intentaba redirigir a una URL después del éxito de Ajax, lo que es inesperado. Lo reemplacé con 'format.json {head: ok}' y desapareció la redirección innecesaria. –

0

Cuando ejecuta su consulta puede devolver algún código que dice que se ejecutó con éxito para confirmar que la fila se eliminó. Entonces puede devolver eso solo para asegurarse de que la consulta también se haya ejecutado correctamente junto con la llamada ajax.

+0

Bien, sé si mi consulta fue exitosa o no, pero ¿CÓMO sugieres devolverla? Por ejemplo: format.json {"false"} o render: nothing => true, or ..? – 99miles

2

yo encontramos este camino más corto para hacer el trabajo:

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

Esto devuelve 200 a jQuery junto con un espacio único en la respuesta. jQuery no interpreta esto como un éxito. Por lo tanto, devolverá el éxito pero no la devolución de llamada correcta. – JaeGeeTee

+0

Guau, esto fue en realidad parchado. ¡Estoy corregido! – JaeGeeTee

3

probar esto es trabajando para mí

def destroy 
    ...   
    render json: {}, status: 200 
end 
Cuestiones relacionadas