2011-05-25 29 views
2

我有以下形式:Rails的远程投掷形式的SyntaxError

<%= 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 

然后这里是处理的JavaScript表单AJAX:

$('#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检查或者在提交评论表单时显示我在任何页面的第1行(这只是文档类型)的SyntaxError: Parse error,我找不到原因。

甚至不知道从哪里开始。

回答

0

尝试把你的电话bind在同一行new_comment参考:

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

不行。仍然得到相同的错误。 – Shpigford 2011-05-25 19:58:48

0

我想你看错行1 - 你包括你的JavaScript文件,这可能意味着1号线其中之一。这也可能意味着回传的是第一行。

说实话 - 尝试Chrome并开启调试功能,Chrome在说明哪个文件给出问题和位置时更好。

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

+1

有趣。在Chrome中,我的'jquery.min.js'文件中的错误是'Uncaught SyntaxError:Unexpected token <'在一行中。 – Shpigford 2011-05-25 20:01:06

0

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

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

1

我得到了那个错误,这是因为远程ajax调用期待JavaScript和我正在返回html。 .ajax调用默认为dataType'脚本',所以当它得到ajax结果时,它试图评估它,并且任何<标记都会导致错误。

我摆脱了错误,将视图从.js.erb更改为.html.erb并将'data-type' => 'html'添加到包含:remote => true的链接。

在某些情况下,它可能是有意义的有窗体本身是一个JavaScript片段 - 是这样的:

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

然后你就可以省略数据类型从链接。

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

+0

+1这对我有用。 – Trip 2012-08-23 11:26:33

+0

我发现使用'if request.xhr?'过滤而不是'format.js(on)'可以防止语法错误 – Mikey 2013-06-07 22:13:48