magic suggest возвращает ошибку ПОСЛЕ 404

#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 были правильными.

Мой друг помог, поэтому я смог это исправить.

Это то, что я сделал..

  1. Устранен контроллер FoodSearch, потому что он вообще не нужен.

  2. Создал действие поиска в моем контроллере питания следующим образом:

    поиск по умолчанию отображает json: [‘cocain’, ‘crack’, ‘gorilla testosterone’] конец

  3. Отредактировал мои маршруты для запроса POST вместо get * Это был ключ:

    ресурсы: продукты, делают ли сбор, делают ли сообщение: конец поиска

— Другой вариант, как предлагает karlipoppins, заключается в простом изменении типа запроса, выполняемого magicSuggest, путем включения атрибута метода следующим образом:

         input.magicSuggest({
           method: 'get',
           data: "/foods/search/",
           placeholder: "Search Foods...",
           valueField:'idFood',
           displayField:'foodName'
        }); 
  

Тогда мне не нужно было бы менять маршрут для post.

  1. Добавлен этот путь к атрибуту данных в js

    данные: «/ foods /search/»

Это будет огромной помощью для всех, кто пытается заставить magicSuggest работать в rails. Честно говоря, это чертовски простая настройка. Этот один бит и форматирование JSON были единственным, что сбивало меня с толку.

Комментарии:

1. Я рад, что вы нашли свою проблему, но это не имело никакого отношения к magicsuggest. Таким образом, это просто стандартный способ вывода json из контроллера rails и используется каждый раз, когда вы выполняете какие-либо действия ajax. Magicsuggest не заботится о том, как формат попадает в него, если он правильно отформатирован. Вы могли бы при создании компонента задать этому свойству method значение get , если бы хотели, чтобы он выполнял запрос get вместо запроса post.

2. Ах .. я вижу это. Я искал способ изменить тип запроса, который magicSuggest делал, на запрос get. Вы только что указали, что мне нужно было искать свойство ‘method’.. Я не знаю, почему я не искал свойство с таким именем. В любом случае, спасибо.