js.erb渲染文本而不是JS

时间:2017-04-03 10:58:58

标签: javascript ajax ruby-on-rails-5

尝试通过轨道中的AJAX更新搜索结果时出现一个奇怪的问题是将js.erb加载到页面上原始文本的<pre>标记中,而不是在该文件中触发任何js。

索引控制器中的

if request.format.js?
    respond_to do |format|
      format.js { render layout: false }
    end
  end

表单设置为使用remote激活AJAX:true

    = form_tag(search_path, id: "form", remote: true, :'data-type' => 'script') do

index.je.erb

alert('hello');
$("#results").innerHTML("<%= escape_javascript(render partial: 'results', locals: { results: @results } ) %>"); 

的routes.rb

  match 'search', to:  'properties#index', via: :post, defaults: { format: 'js' }

在路由中,我试图从表单强制js,因为之前它是JSON,但没有任何区别。 从日志中,控制器正在接收js请求,但我在CHrome调试器中得到了这个:

(index):69 Resource interpreted as Document but transferred with MIME type text/javascript: "http://localhost:3000/search".

坚持alert("Js is working")没有问题,所以JS就在那里并解雇

我陷入困境,这应该是现在的工作,我错过了什么傻事,或者Rails 5中我不知道的新东西?

如果我可以提供更多信息来帮助你打扰我,请问问!

提前致谢

1 个答案:

答案 0 :(得分:0)

那好吧。似乎'遥远:真实'是不够的!它似乎确实将ajax请求提交给控制器,但控制器确定它是文本。

添加

jQuery ->
  $('#form').on "change", ->
    $.ajax '/properties/index',
    type: 'GET'
    dataType: 'script'
    data: $('form').serialize()

并将表单提交到纯粹的ajax似乎解决了这一切!