Vor kurzem schriftlich ein Blog-System in der Praxis zu üben, ist ein Problem aufgetreten, Benutzer, Kommentare hinzufügen, wenn sie AJAX Requests senden möchten, aber die Ajax in Schienen und Python nicht das gleiche, das Ajax in Python ist mit Js implementiert wird, Jquery und Schienen ist nicht das gleiche, In diesem Datensatz die Studie für eine lange Zeit endlich herausgefunden, ein wenig
Rahmen zu sagen, möchten wir eine AJAX-Anfrage senden
Rails ist ein Framework, und Ajax ist sehr eng mit dem Backend integriert.
Wenn wir eine AJAX-Anfrage senden möchten, können wir eine Eigenschaft hinzufügen, wenn die Vorlage generiert wird
Form Form, < % = Form_for (comment.new), Url: Post_comments_path (@post), Fernbedienung: True | f | % ≫ wenn ich Fernbedienung: True hinzufügen, ich sende einen AJAX-Request.
Ein Tag ist das gleiche < % = Link_to "Ajax-Request", "/ Xxxx/zu schaffen", Fernbedienung: True % > so dass Sie eine AJAX-Anfrage senden können.
Warum schicken wir einen AJAX-Request mit solch einer Einstellung? Durch die interne Verwendung von Schienen?
Schienen verwendet eine so genannte unaufdringlich JavaScript (UJS), um eingebaute JavaScript-Funktionalität zu montieren, wo Sieapp/assets/javascripts/application.jsEs ist innen geladen.//= require jquery_ujs, Dazu gehören
- Können Sie Hyperlinks zu verwendet werden
:methodParameter-Unterstützung nicht-GET-Methode
- Verwenden von Hyperlinks, Schaltflächen und Formulare verwenden
:remote => trueUnterstützung für Ajax
- Hyperlinks, Schaltflächen und Formulare können verwendet werden
"data-confirm"Parameter kann Confirm-Dialog-Fenster springen.
- Die senden Taste kann verwendet werden
data-disable-withParameter schließen vorübergehend die Schaltfläche, wenn Sie das Formular senden, wiederholte Lieferung zu vermeiden
Hier hatte ich auch ein Problem, wenn ich es direkt geschickt, der Server erzählte mir, es gab keine token CSRF-Validierung
Hier müssen wir hinzufügen < % = Csrf_meta_tags % > an der Vorlage, damit es nicht schief gehen.
Der Prozess der AJAX-Anfrage
1. wenn wir klicken, um eine AJAX-Anfrage senden, werden in den entsprechenden Controller. Zum Beispiel bin ich hier in der Cmment-Steuerung.
Comments_conttroller.rbclass Commentscontroller Applicationcontroller Def erstellen pp Params @post = Post.where ( ID:params [: p Ost_id]). erste @comment = Comment.new (user_id:current_user.id, Post_id:params [: p Ost_id], Inhalt: Params [: Kommentar] [: Content]) Respond_to | Format | Wenn @comment sichern Sie Format.html # im Inneren ist den HTML-Code generiert werden, ist die #执行的js代码 format.js Name und der Name der Methode, die ich auf der Seite konsistent hinzufügen möchten , Wie mich ist dies Create.js.erb Format.json {Rendern Json: @comment} am Ende Ende Private Def Comment_params P Arams.require (: Kommentar). zulassen (: Content) Endend
Respond_to | Format | "Api.rubyonrails.org/classes/ActionController/MimeResponds.html" kann auf der Website zu sehen Nutzung gehen.
Die Hauptsache ist, zu sehen, was wir zurück sind, und hier ist die AJAX-Request, so ist die Rückkehr format.js.
(2) zu den entsprechenden create.js.erb
$("#comment_content").append("<%= escape_javascript(render 'create') %>")
<%= escape_javascript(render 'create') %>
Hier gehen Sie zurück, um die entsprechende Vorlage finden ich hier Rendern "erstellen", dann geht er zurück um zu finden (denn ich hier Kommentare, zurück in die Kommentare-Verzeichnis bin zu finden) _create.html.erb.
So können Sie eine AJAX-Anfrage senden.