В настоящее время я использую Jquery для сериализации () формы, содержащей текстовую область, и отправки ее в Rails.
В большинстве случаев это работает успешно, если только текстовая область не содержит строки в кавычках. Если такая строка существует, Rails анализирует содержимое между кавычками этой строки как переменную params, а не все содержимое поля.
Например: возьмите задачу [описание] следующего POST-запроса, отправленного на рельсы 2.3.8 через Jquery Post
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 Source
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 * 1029 * в качестве содержимого переменной, а не всего после =
Кавычки экранируются как% 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")}
})