2

我有以下的jQuery的js插入在我看來,一個形式(application.js中):創建使用jQuery形式,會話乏後正常了提交

$("#add_new_quote").click(function() { 
    $(".quote:first").prepend("<form action=\"" + window.location + "\" accept-charset=\"UTF-8\" method=\"post\"> " + 
     "Quote: <input id=\"quote_text\" name =\"quote_text\" type=\"text\" maxlength='145' size='100'>" + 
     "<input name=\"submit\" type=\"submit\" value=\"Add\">" + 
     "</form>" + 
     "<br>"); 
}); 

當我點擊提交,所有的會話瓦爾我已經設置了某種程度上失去了,我不知道爲什麼和如何。例如,我將會話變量(session [:user_id])中的用戶id設置爲引用,提交後它爲空。我嘗試添加在視圖中使用的form_tag一種形式,並能正常工作,所以我想我失去了一些重要的東西......

我使用的Rails 3和jQuery 1.5。

+0

你試過一個硬編碼的HTML表單?如在一個寫入HTML並且不是由JavaScript生成的表單? – Dimitry 2011-03-06 22:31:15

+0

@Dimitry是的,我只是在嘗試同樣的事情!我在視圖中使用form_tag創建了表單,然後使用jQuery在頁面加載時隱藏()它;然後我可以顯示()表單並且提交工作正常。這對我來說是很好的選擇,但我仍然很好奇在上面的示例中清除會話變量的方式......感謝您的建議! – Svilen 2011-03-06 22:46:52

+0

所有想到的是一個瀏覽器安全功能,防止生成的表單提交會話數據。但這似乎不太可能。請嘗試刪除操作並接受字符集表單屬性,然後再次提交表單。 – Dimitry 2011-03-06 23:10:29

回答

0

顯然,當我提交了手工製作的形式與jQuery,Rails不真實性令牌添加到POST參數,因此「問題」可能是由一個安全特徵,滑軌造成其清除會話。一個替代方案是使用的form_tag在視圖創建表格,使用jQuery來隱藏()它在頁面加載時,並使用切換()取消隱藏/隱藏表單時鏈接或按鈕用戶點擊。感謝Dimitry和moo-too-short對他們的幫助。

1

如果添加此它將設置CSRF令牌......

// ahead of the form string 
var token = $('meta[name="csrf-token"]').attr('content'); 

// then in the form string 
"<input name='authenticity_token' type='hidden' value='" + token + "'/>" 

這應該可以解決,如果你不能使用AJAX,這將做到這一點對你的問題。