Допустимо ли делать запросы POST с дополнительными параметрами через link_to? - PullRequest
0 голосов
/ 29 апреля 2011

В Rails легко сделать ссылку, сделав запрос POST. Что-то вроде link_to 'Click me', some_path, :method => :post. Это прекрасно работает ... если только вам не нужно передавать дополнительные параметры. Поскольку нет способа сделать реальный запрос POST по ссылке, Rails подделывает его с помощью запроса GET, что означает, что если вы попытаетесь передать дополнительные параметры в some_path он встраивает его в строку запроса. Поэтому, когда вы наводите курсор мыши, вы получаете ссылку, которая выглядит следующим образом:

/some_path?foo=var&foo=bar[foo][bar]

Обычно это не так уж и плохо, за исключением того, что это становится очень уродливо, если у вас есть контроллер, который ожидает несколько вложенных параметров.

Так что мой вопрос, это кого-то беспокоит, или это только у меня?

Единственный обходной путь, о котором я могу подумать, - это изменить href на #, добавить скрытую форму поблизости и добавить обработчик кликов к ссылке, которая сериализует форму и отправляет ее при щелчке по ссылке. Это делает ссылку неприемлемой, и это огромная работа, которая в основном сводится к эстетическому захвату. Но я довольно одержим своими URL. Есть ли более простой способ? Или я просто схожу с ума и должен просто разобраться с параметрами в строке запроса?

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Интернет - это уродливое место, и одна из вещей, которые раздражают, это то, что вы не можете сделать ссылку POST без создания формы или использования какого-то дикого JavaScript для обработки в фоновом режиме.

Это беспокоит людей, которые обеспокоены тем, насколько аккуратны их URL-адреса, что на самом деле слишком мало, если честно, но единственное надежное решение - это форма плюс небольшое аккуратное расширение jQuery для обработки триггера.

Однако, чтобы избежать появления уродливого URL в браузере, вы всегда можете сделать запрос через AJAX, отправить обратно URL, а затем перенаправить на этот URL после завершения части AJAX. Это дает вам возможность представить счетчик типа «Отправка» или «Запрос».

0 голосов
/ 30 апреля 2011

Как что-то вроде следующего:

<html>
<head>
<script>
function myOnClick() {
  // ... do custom ajax w/whatever parameters.
  alert("myOnClick()");
}
</script>
</head>
<body>
<a href="http://www.example.com/" onClick="myOnClick();return false;">link text</a>
</body>
</html>

Браузер покажет значение href в строке состояния, но функция myOnClick() - это то, что фактически вызывается при нажатии на ссылку. Часть return false необходима для предотвращения обработки браузером атрибута href.

Функция myOnClick() может выполнять любую операцию, например, запрос ajax, с любыми параметрами, которые вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...