#ruby-on-rails-4 #autocomplete #ruby-on-rails-3.2 #magicsuggest
#ruby-on-rails-4 #автозаполнение #ruby-on-rails-3.2 #magicsuggest
Вопрос:
Я пытаюсь заставить автозаполнение работать в моем приложении rails с помощью Magic Suggest.
Я думаю, что это правильный вопрос: как я могу заставить MagicSuggest захватить JSON, который находится на URL, который я ему даю?
Это ошибка, которую консоль возвращает при вводе букв:
POST http://localhost:3000/search_foods 404 (Not Found) jquery.js:8706
Uncaught Could not reach server
Вот код magic suggest:
input.magicSuggest({
data: "/foods/search/",
placeholder: "Search Foods...",
valueField:'idFood',
displayField:'foodName'
});
Маршруты
resources :search_foods
Контроллер и действие
class SearchFoodsController < ApplicationController
def index
render json: %['Crack', 'Cocain', 'Gorilla Test', 'Horse Test']
end
end
Когда я посещаю URL-адрес / search_foods напрямую, я получаю
'Crack', 'Cocain', 'Gorilla Test', 'Horse Test'
как и задумано моим кодом.
Я думаю, проблема в том, что MagicSuggest по умолчанию отправляет POST-запрос, хотя я не уверен, что это полностью актуально:
You can pass the url from which the component will fetch its JSON data.Data will be fetched
* using a POST ajax request that will * include the entered text as 'query' parameter. The results
* fetched from the server can be:
* - an array of JSON objects (ex: [{id:...,name:...},{...}])
* - a string containing an array of JSON objects ready to be parsed (ex: "[{id:...,name:...},{...}]")
* - a JSON object whose data will be contained in the results property
* (ex: {results: [{id:...,name:...},{...}]
Комментарии:
1. В чем ее значение? лол, я бы не знал иначе. Я полагаю, что это значение по умолчанию на моей машине.
2. Когда вы говорите, что посещаете URL напрямую, вы подразумеваете, что вы вводите localhost:3000/search_foods в браузере и получаете результат?
3. Да, когда я набираю именно этот URL, я получаю ожидаемый результат.
4. Что ж.. Это исходный вид результата. ‘Crack’, ‘Cocain’, ‘Gorilla Test’, ‘Horse Test’
Ответ №1:
Попробуйте это:
input.magicSuggest({
data: "http://localhost:3000/search_foods",
placeholder: "Search Foods...",
valueField:'idFood',
displayField:'foodName'
});
Комментарии:
1. СООБЩЕНИЕ http:// localhost:3000/search_foods 404 (не найдено) без пробела (КАК и удаление части http://)
2. пожалуйста, проверьте, есть ли в коде вашего сервера / контроллера сопоставление для обработки POST-вызова http:// localhost:3000/search_foods. Также ваш ответ не в формате JSON, как того требует MagicSuggest.
3. ОК. Пожалуйста, дайте мне немного времени, чтобы точно выяснить, как это сделать.
Ответ №2:
В документе указано, что компонент ожидает одно из следующих:
* - an array of JSON objects (ex: [{id:...,name:...},{...}])
* - a string containing an array of JSON objects ready to be parsed (ex: "[{id:...,name:...},{...}]")
* - a JSON object whose data will be contained in the results property
* (ex: {results: [{id:...,name:...},{...}]
При посещении /search_foods
вы получаете
'Crack', 'Cocain', 'Gorilla Test', 'Horse Test'
Это не подходит ни для одного из 3 поддерживаемых случаев.
Ответ №3:
Мои подозрения относительно запроса POST были правильными.
Мой друг помог, поэтому я смог это исправить.
Это то, что я сделал..
-
Устранен контроллер FoodSearch, потому что он вообще не нужен.
-
Создал действие поиска в моем контроллере питания следующим образом:
поиск по умолчанию отображает json: [‘cocain’, ‘crack’, ‘gorilla testosterone’] конец
-
Отредактировал мои маршруты для запроса POST вместо get * Это был ключ:
ресурсы: продукты, делают ли сбор, делают ли сообщение: конец поиска
— Другой вариант, как предлагает karlipoppins, заключается в простом изменении типа запроса, выполняемого magicSuggest, путем включения атрибута метода следующим образом:
input.magicSuggest({
method: 'get',
data: "/foods/search/",
placeholder: "Search Foods...",
valueField:'idFood',
displayField:'foodName'
});
Тогда мне не нужно было бы менять маршрут для post.
-
Добавлен этот путь к атрибуту данных в js
данные: «/ foods /search/»
Это будет огромной помощью для всех, кто пытается заставить magicSuggest работать в rails. Честно говоря, это чертовски простая настройка. Этот один бит и форматирование JSON были единственным, что сбивало меня с толку.
Комментарии:
1. Я рад, что вы нашли свою проблему, но это не имело никакого отношения к magicsuggest. Таким образом, это просто стандартный способ вывода json из контроллера rails и используется каждый раз, когда вы выполняете какие-либо действия ajax. Magicsuggest не заботится о том, как формат попадает в него, если он правильно отформатирован. Вы могли бы при создании компонента задать этому свойству
method
значениеget
, если бы хотели, чтобы он выполнял запрос get вместо запроса post.2. Ах .. я вижу это. Я искал способ изменить тип запроса, который magicSuggest делал, на запрос get. Вы только что указали, что мне нужно было искать свойство ‘method’.. Я не знаю, почему я не искал свойство с таким именем. В любом случае, спасибо.