Rails远程表单抛出SyntaxError

时间:2011-05-25 19:21:05

标签: javascript ruby-on-rails ajax syntax-error

我有以下表格:

<%= form_for [@commentable, Comment.new], :remote => true do |f| %>
  <%= f.text_area :body %>
  <%= f.submit "Add your comment" %>
<% end %>

然后控制器(严重剥离到基本部分):

def create
  respond_with(@comment) do |format|
    format.html { redirect_to params[:return_url] }
    format.json { render :layout => !request.xhr? }
  end
end

然后这是用于处理表单AJAX的javascript:

$('#new_comment')
  .bind('ajax:success', function(evt, data, status, xhr){
    var $this = $(this);

    // Append response HTML (i.e. the comment partial or helper)
    $('#comments ol').append(xhr.responseText);
    $('#comments ol li:last-child').effect("highlight", {}, 3000);

    // Clear out the form so it can be used again
    $this.find('input:text,textarea').val('');

    // Clear out the errors from previous attempts
    $this.find('.errors').empty();
  })
  .bind('ajax:error', function(evt, xhr, status, error){
    // Display the errors (i.e. an error partial or helper)
    $(this).find('.errors').html(xhr.responseText);
  });

表单提交正常,评论会按原样附加,但Safari的Web Inspector在提交评论表单时我所在的任何页面的第1行(这只是doctype)显示SyntaxError: Parse error ,我无法弄清楚原因。

甚至不确定从哪个开始。

4 个答案:

答案 0 :(得分:1)

我遇到了这个错误,这是因为远程ajax调用期待JavaScript而我正在返回html。 .ajax调用默认为dataType'script',因此当它获得ajax结果时,它尝试评估它和任何&lt;标签导致错误。

我通过将.js.erb中的视图更改为.html.erb并将'data-type' => 'html'添加到包含:remote => true的链接来消除错误。

在某些情况下,将表单本身设为JavaScript代码段可能是有意义的 - 例如:

$('#container').replace("<%= escape_javascript(render(...)) %>");

然后您可以从链接中省略数据类型。

有关数据类型here的更多信息。

答案 1 :(得分:0)

尝试将bind来电与new_comment引用相同:

$('#new_comment').bind('ajax:success', function(evt, data, status, xhr){

答案 2 :(得分:0)

我认为你正在查看错误的第1行 - 你是否包含了你的JavaScript文件,它可能意味着其中一行的第1行。它也可能意味着发回的第1行。

说实话 - 尝试使用Chrome并启用调试功能,Chrome可以更好地说明哪个文件存在问题以及在哪里。

您无需将所有JQuery放入文件中 - 如果您安装了正确的gem,您可以在视图中编写响应 - 不确定这是否有帮助。

答案 3 :(得分:0)

您是否在页面上有一个div,其中包含“错误”类?我遇到了一个非常类似的问题,在寻找解决方案时发现了这个问题。

我的问题是我们试图回写一个不存在的div(因为页面上除了.empty?)。当我们解决了这个问题时,成功的回调就起作用了。