【发布时间】:2010-07-27 00:46:14
【问题描述】:
我目前正在使用 Jquery 来序列化()一个包含文本区域的表单,并将其发布到 Rails。
这在大多数情况下都可以成功,除非文本区域本身包含引号中的行。如果存在这样的行,Rails 会将该行的引号之间的内容解析为 params 变量,而不是字段的全部内容。
例如:获取以下 POST 请求的任务[描述],通过 Jquery Post 发送到 rails 2.3.8
FireBug: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
Firebug: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”的值,而不是整个文本块。 (line1 "line2" "line3" line4)...见下文
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 似乎从 POST 源 解析两个 %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”)。它将引号中的第一行作为参数哈希值。我看到了几个投票和星星,其他人是否也遇到这种情况?
-
如果其他人像我一样,明星就是人们将它添加到收藏夹以便他们可以看到答案。
-
您能否编辑问题并添加您用于发布帖子的 jquery 代码。
-
嗨,史蒂夫,我用使用的 jQuery 更新了我的原始帖子。它与您在下面发布的内容非常相似。
标签: jquery ruby-on-rails ruby