2010-09-25 5 views
17

ich ein wenig Ajax-Aufruf, die Schienen ruft: Ich bin einfach einen Eintrageinfach Rückkehr Erfolg oder Misserfolg von Ajax-Aufruf in Schienen

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

Im Schienen-Controller aus der Datenbank zu löschen, und ich möchte einfach zurückgeben, wenn es erfolgreich war oder nicht. Was ist der beste Weg?

Soll ich einfach JSON in Antwort_to zurückgeben? Wenn ja, was genau hättest du darin enthalten?

Antwort

25

bester Weg zum Erfolg auf diese Weise zu kennzeichnen ist die folgend in Ihrem Controller zu setzen ...

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

danke! für den Rekord, für einen Fehler könnte es etwas wie sein: format.json {render: json => @ obj.errors,: status =>: unprocessable_entity} – 99miles

+1

Ich habe gelesen, dass nur die Rückkehr ok funktioniert möglicherweise nicht: http: // stackoverflow .com/questions/4791499/jquery-doesnt-call-success-methode-auf-ajax-for-rails-standard-rest-delete-ant – lulalala

+0

Ich benutzte 'format.json {head: no_content}' wie ich nicht ' Ich möchte keine Daten senden. Aber der Browser versuchte nach einem Ajax-Erfolg auf eine URL umzuleiten, was unerwartet ist. Ich habe es durch 'format.json {head: ok}' ersetzt und die unnötige Umleitung ist weg. –

0

Wenn Sie Ihre Abfrage ausführen, wird möglicherweise Code zurückgegeben, der besagt, dass der Befehl erfolgreich ausgeführt wurde, um zu bestätigen, dass die Zeile gelöscht wurde. Sie können das also nur zurückgeben, um sicherzustellen, dass die Abfrage auch zusammen mit dem Ajax-Aufruf erfolgreich ausgeführt wurde.

+0

Richtig, ich weiß, ob meine Abfrage erfolgreich war oder nicht, aber WIE schlagen Sie vor, das zurückzugeben? Zum Beispiel: format.json {"false"} oder render: nichts => true oder ..? – 99miles

2

fand ich diesen kürzeren Weg, um den Job zu erledigen:

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

Dies gibt eine 200 an jQuery zusammen mit einem einzelnen Leerzeichen in der Antwort zurück. jQuery interpretiert dies nicht als Erfolg. Es wird also Erfolg zurückgeben, aber nicht den Erfolgsrückruf aufrufen. – JaeGeeTee

+0

Wow, das wurde tatsächlich gepatcht. Ich stehe korrigiert! – JaeGeeTee

3

dies versucht es Arbeiten für mich

def destroy 
    ...   
    render json: {}, status: 200 
end 
Verwandte Themen