有没有办法在提取调用后呈现js.erb?

问题描述 投票:0回答:1

在我的Rails应用程序中,我想在获取调用之后呈现js.erb部分,并且由于某些原因我不明白它不起作用。如果你能帮助我,那就太棒了。

在视图中,事件触发此函数基本上执行获取请求:

function updateState(id, state){
      const csrfToken = document.querySelector('meta[name="csrf-token"]').attributes
          .content.value;
      fetch(window.location.origin + "/update_state", {
          method: "POST",
          headers: {
            'Accept': "JS",
            "Content-Type": "application/json",
            "X-CSRF-Token": csrfToken
          },
          body: JSON.stringify({'id': id, 'state': state}),
          credentials: "same-origin"
        })
}

然后在我的控制器中:

  def update_state
    @model = Model.find(params[:id])
    authorize @model
    @model.update(state: params[:state])

    respond_to do |format|
      format.html { redirect_to xxx }
      format.js
    end
  end

在我的js.erb文件中:

console.log('hello');

但是,在这种情况下,我从服务器收到错误:ActionController :: UnknownFormat在'respond_to do | format |行我觉得服务器不理解fetch的标题:'Accept':“JS”

当我查看服务器的日志时:

Started POST "/update_state" for 127.0.0.1 at 2019-04-04 11:22:49 +0200
Processing by ModelsController#update_state as JS

但我认为Rails不承认它。我该怎么办?

我在控制器中也尝试了这个:

  def update_state
    @model = Model.find(params[:id])
    authorize @model
    @model.update(state: params[:state])
    render 'update_state.js', layout: false
  end

哪个不会引发错误。我在客户端收到了js.erb。但是,它没有执行(console.log不执行)。

你有什么主意吗?非常感谢你的帮助。

javascript ruby-on-rails fetch erb
1个回答
0
投票

有同样的问题,这里实际上有两个问题。你是对的,你的标题不是。这些标题触发.js.erb为我工作,看起来非常正确:

'dataType': 'json',
'contentType': 'application/json; charset=utf-8',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-Token': - your CSRF method to get the token -

但其次是触发js响应,你的respond_to块:

respond_to do |format|
  format.html { redirect_to xxx }
  format.js
end

首先必须有format.js。由于rails对HTML有响应,它将首先响应HTML并且似乎甚至不寻找下一个格式块。

respond_to do |format|
  format.js
  format.html { redirect_to xxx }
end

希望能帮助到你 :-)

© www.soinside.com 2019 - 2024. All rights reserved.