Как получить обещание ajax только от главы ответа?

#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.