2011-05-25 58 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