【问题标题】:Rails Uncaught SyntaxError: Unexpected token <Rails Uncaught SyntaxError: Unexpected token <
【发布时间】:2018-05-28 02:44:23
【问题描述】:

我在通过 js 进行部分渲染时收到 Uncaught SyntaxError: Unexpected token &lt; 错误。部分只包含一个表格。

正在调用部分,但浏览器控制台中的错误消息将 table 标记的第一个 &lt; 显示为意外令牌。

<table class='table table-sm'> # <- this line errors
  <thead>
    <tr>
      <th>Part #</th>
      <th>Description</th>
      <th>Qty</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>SCS-#10-24X.375-BLK</td>
      <td>Countersunk screw, #10-24 X .375, Black oxide</td>
      <td>2.0</td>
    </tr>
  </tbody>
</table>

_check_it.html.haml

- if @part.part_structures == 0
  No components
- else
  %table.table.table-sm
    %thead
      %tr
        %th Part #
        %th Description
        %th Qty
    %tbody
      - @part.part_structures.each do |ps|
        %tr
        %td= ps.component.partNo
        %td= ps.component.description
        %td= ps.qty

check_it.js.erb

$("#that_one").replace("<%= j render(partial: 'check_it') %>");

parts_controller.rb

def check_it
  respond_to do |format|
    format.js {render partial: 'check_it', :content_type => 'text/html', part: @part}
  end
end

为什么会在 JS 控制台中出现 table 标签开头的部分错误?

【问题讨论】:

  • 似乎是您在parts_controller 中的{render.... } 块是问题所在,这是什么操作?是check_it
  • 是的。我在那里更新了代码
  • 因为您的check_it.js.erb 已经进行了部分交换,所以您不需要{render...} 并且它不正确,因为format.js 这意味着rails 正在发回一个js 响应,而不是html。
  • 看起来糟糕的 {render...} 完全阻止了 js.erb 被调用。我剥离了 format.js {} 并且它正在工作。谢谢

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


【解决方案1】:

如果check_it.js.erb 文件在同一文件夹中,则无需从控制器渲染。只要方法名称也相同,它就会自动执行。

# parts_controller.rb
def check_it
  #@part is already class instance variable. no need also
  respond_to do |format|
    format.js{}
  end
end

# parts/check_it.js.erb
console.log("<%= @part %>")
$("#that_one").replace("<%= j render(partial: 'check_it') %>");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2019-02-10
    • 2014-07-08
    • 2011-03-09
    • 2014-01-06
    • 2012-04-10
    相关资源
    最近更新 更多