我目前使用jquery序列化()一個窗體,其中包含一個textarea,並將其張貼到Rails。Rails的params解析,逃避需要?
這在大多數情況下都可以成功運行,除非textarea自身包含一行引號。如果存在這樣的行,Rails會將該行的引號之間的內容解析爲params變量,而不是該字段的全部內容。
例如:採取以下POST請求的任務[說明],發送通過jQuery張貼到導軌2.3.8
螢火:POST參數
authenticity_token r0uu4QQ9e73aEsSKl2LJRIWap1BSQWMKRaieCOwHEpg=
task[description] line1
"line2"
"line3"
line4
task[due_date]
task[project_id] 1
task[responsible_user_id] nobody
task[title] Parse Bug
螢火蟲: POST來源
authenticity_token=r0uu4QQ9e73aEsSKl2LJRIWap1BSQWMKRaieCOwHEpg%3D&
task%5Bproject_id%5D=1&task%5Bresponsible_user_id%5D=nobody&
task%5Bdue_date%5D=&task%5Btitle%5D=Parse+Bug&
task%5Bdescription%5D=line1%0A%22line2%22%0A%22line3%22%0Aline4
在rails解析請求之後,params [:task] [:description]獲取「line2」的值而不是整個文本塊。 (一號線 「2號線」, 「3號線」 4號線)...見下文
Rails開發日誌
Processing TasksController#create (for 127.0.0.1 at 2010-07-26 17:05:06) [POST]
Parameters: {"action"=>"create", "authenticity_token"=>"r0uu4QQ9e73aEsSKl2LJRIWap1BSQWMKRaieCOwHEpg=",
"task"=>{"title"=>"Parse Bug", "project_id"=>"1", "due_date"=>"",
"description"=>"line2", "responsible_user_id"=>"nobody"}, "controller"=>"tasks"}
看來,Rails通過源後任何解析之間有兩個%0A 22%作爲變量的內容而不是後面的所有內容=
引號被轉義爲%22但我應該以不同的方式轉義它們嗎?
非常感謝! 如果我的描述很混亂,請讓我澄清它的任何部分。
更新
這裏的相對jQuery的使用:
$('#new-item').find('.submit').live('click', function(){
var form = $(this).closest('form');
$.post(form.attr("action"), form.serialize(), null, "script");
return false;
});
$.ajaxSetup({
'beforeSend':function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
})
要添加一些更多的說明,只有在整行引用時纔會發生這種情況。如果該行的一部分用引號引起來,Rails會適當地解析它。 如果2行完全在引號中(如上例中的「line3」)。它將採用引號中的第一行作爲params散列值。 我看到好幾張選票和明星,其他人是否也遇到過這種情況? – csponge 2010-07-27 16:09:37
如果其他人和我一樣,明星們會將其添加到收藏夾中,以便他們看到答案。 – 2010-07-27 20:22:16
你可以編輯這個問題,並添加你用來做這個帖子的jQuery代碼。 – 2010-07-27 20:39:43