Волшебное предложение возвращает ошибку POST 404
Я пытаюсь заставить автозаполнение работать в моем приложении rails, используя Magic Suggest.
Я думаю, что это правильный вопрос: как я могу заставить MagicSuggest получить JSON, который находится по URL-адресу, который я ему даю?
Это ошибка, которую возвращает консоль, когда я набираю буквы:
POST http://localhost:3000/search_foods 404 (Not Found) jquery.js:8706
Uncaught Could not reach server
Вот волшебный код подсказки:
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
Когда я захожу на /search_foods url напрямую, я получаю
'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:...},{...}]
3 ответа
Мои подозрения по поводу POST-запроса были правильными.
Мой друг помог, поэтому я смог это исправить.
Это то, что я сделал..
Исключен контроллер FoodSearch, потому что он вообще не нужен.
Создал поисковое действие в моем контроллере еды примерно так:
def search render json: ['кокаин', 'крэк', 'тестостерон гориллы'] конец
Отредактировал мои маршруты к запросу POST вместо get * Это был ключ:
ресурсы: продукты делают коллекцию делать пост: поиск конец конец
--- Другой вариант, как предлагает karlipoppins, - просто изменить тип запроса, который выполняет magicSuggest, включив атрибут метода, например, так:
input.magicSuggest({
method: 'get',
data: "/foods/search/",
placeholder: "Search Foods...",
valueField:'idFood',
displayField:'foodName'
});
Тогда мне не нужно будет менять маршрут для публикации.
Добавил этот путь к атрибуту данных в js
данные: "/food /search/"
Это будет огромной помощью любому, кто пытается заставить magicSuggest работать в рельсах. Это чертовски простая установка, если честно. Этот бит и JSON-форматирование - единственное, что меня здесь запутало.
Попробуй это:
input.magicSuggest({
data: "http://localhost:3000/search_foods",
placeholder: "Search Foods...",
valueField:'idFood',
displayField:'foodName'
});
В документе указано, что компонент ожидает одно из следующего:
* - 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 поддерживаемых случаев.