我有以下表格:
<%= 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
,我无法弄清楚原因。
甚至不确定从哪个开始。
答案 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?)。当我们解决了这个问题时,成功的回调就起作用了。