#ruby-on-rails #ajax #api #ember.js
#ruby-on-rails #ajax #API #ember.js
Вопрос:
Проще говоря: мне нужно обработать ответ из rails API, чтобы что-то сделать, но мне нужен только заголовок ответа, без каких-либо данных.
Но then
не получает ответ, когда он содержит только заголовок.
Подробнее:
действие контроллера rails:
def index
# some logic here ...
head :created
end
действие компонента ember:
let adapter = getOwner(this).lookup('adapter:application');
adapter.ajax(
adapter.buildURL('/index'), 'POST', { some_param: 'some_content' }
).then(() => { 'do something here...' });
Так что в этой реализации { 'do something here...' }
никогда не используется.
Но это работает успешно, если изменить действие контроллера:
def index
render json: [], status: :created
end
но мне не нужно отображать часть json в ответ.
Итак, вопрос в том:
как можно запустить код 'do something here...'
для действия контроллера:
def index
head :created
end
Любая помощь приветствуется.
Комментарии:
1. вы можете получить доступ к данным ответа из API, используя,
.then((response) => { console.log(response) });
2. нет. Я попробовал это
3. Чтобы прояснить мое понимание: ваш rails API возвращает только заголовки для вашего запроса, который вы делаете, и вам нужно получить доступ к этим заголовкам. Я правильно понял?
Ответ №1:
зачем вообще направлять его через адаптер? в общем, вы должны использовать адаптер только для ember-data
запросов.
Просто используйте fetch
(используйте ember-fetch
, если вам нужно полизаполнение)!
const res = await fetch('/index', {
method: 'POST',
body: JSON.stringify({ some_param: 'some_content' }),
});
console.log(res.headers.get('your-header'));
Комментарии:
1. потому что у нас есть логика для URL-адреса сборки:
adapter.buildURL('some logic here')
2. Вероятно, это неправильное место, если вы не создаете URL-адрес данных. Но вы могли бы просто использовать adapter.buildURL, а затем передать его в fetch вместо adapter.ajax.