Zuvor habe ich die automatische Vervollständigung mit JQuerys Autocomplete, Ajax und httpclient implementiert, konnte den Inhalt jedoch nur vage erfassen. Überprüfen Sie den Inhalt beim Refactoring.
Schneiden Sie zuerst den Teil, der auf die externe API zugreift, in eine Klasse aus und legen Sie ihn im lib-Verzeichnis ab. lib/api_suggest.rb
require 'httpclient'
require 'json'
class ApiSuggest
API_KEY = Rails.application.credentials.api[:API_KEY]
API_URI = Rails.application.credentials.api[:API_URI]
def self.suggest(keyword, max_num)
uri = API_URI
headers = {
Authorization: "Bearer #{API_KEY}",
}
params = {
keyword: keyword,
max_num: max_num,
}
client = HTTPClient.new
req = client.get(uri, body: params, header: headers)
req
end
end
Vor dem Refactoring
client = HTTPClient.new
req = client.get(uri, body: params, header: headers)
res = JSON.parse(req.body)
res
Und ich habe "JSON.parse (req.body)" gemacht, Nach dem Refactoring
req = client.get(uri, body: params, header: headers)
Geben Sie den req
-Teil, der das Ergebnis von client.get ist, unverändert an den Controller zurück.
Auf der Controllerseite app/controllers/suggests_controller.rb
require 'api_suggest'
class SuggestsController < ApplicationController
SUGGEST_MAX_COUNT = 5
def search
@suggests = ApiSuggest.suggest(params[:keyword], SUGGEST_MAX_COUNT)
render body: @suggests.body, status: @suggests.code
end
end
In der 7. Zeile rendern,
render body: @suggests.body, status: @suggests.code
Durch Einfügen in jeden Parameter ist es nicht mehr erforderlich, "JSON.parse" zu verwenden.
Und dieser Parameter ist app/assets/javascripts/suggest.js
$("#form").autocomplete ({
source: function (req, res) {
$.ajax({
url: '/suggest',
type: 'GET',
cache: false,
dataType: "json",
data: { keyword: req.term },
n success: function (data) {
res(data);
},
error: function (xhr, ts, err) {
n res(xhr, ts, err);
}
});
}
});
Der Fluss ist, dass es unter dem Erfolg von Ajax zurückgegeben wird.
Angegeben durch Ajax-Option
Eine Anfrage wurde an url: '/ suggest'
und gesendet
Durch Routing
get 'suggest', to: 'suggests#search'
Die Suchmethode von app / controller / suggests_controller.rb
heißt:
def search
@suggests = ApiSuggest.suggest(params[:keyword], SUGGEST_MAX_NUM)
render body: @suggests.body, status: @suggests.code
end
Als Ergebnis der Verwendung einer externen API-Anforderung auf httpclient durch "ApiSuggest.suggest"
render body: @suggests.body, status: @suggests.code
Ist zurück gekommen,
Ajax in "App / Assets / Javascripts / Suggestions.js"
success: function (res) {
resp(res);
},
error: function (xhr, ts, err) {
resp(xhr, ts, err);
}
Es wird in jedem Fall von Erfolg und Misserfolg zurückgegeben. Der Fluss.
Die Render-Body-Option gibt den Body des Rückgabewerts zurück. Gibt das Ergebnis einer externen API zurück, deren Status ein Statuscode ist (200, 404, 500 usw.).
Wenn Sie es auf der Ajax-Seite erhalten, Beziehen Sie sich in Ajax auf den Statuscode, beurteilen Sie 200 Serien und 300 Serien wie gewohnt und führen Sie die Erfolgsseite aus.
Wenn ein anderer Statuscode kommt, führen Sie die Fehlerseite aus. Wird verarbeitet.
das ist alles.
Vielen Dank für das Lesen bis zum Ende: bow_tone1: Ich lerne Rails aus einem unerfahrenen Zustand, weil ich den Job wechsle. Ich möchte ständig das richtige Wissen erwerben und ein kompetenter Ingenieur werden. Während ich weiter poste, denke ich, dass der Input dafür unvermeidlich zunehmen wird, was zu Wachstum führen wird. Im Moment kann ich keine Ausreden machen, nur weil ich ein Anfänger bin, aber ich denke, es gibt viele Dinge, die mit dem Inhalt des Beitrags falsch sind und die ich hinzufügen sollte, also würde ich es begrüßen, wenn Sie darauf hinweisen könnten. Vielen Dank für das Lesen dieses Artikels.
Recommended Posts