Можно ли иметь несколько целевых страниц с кросс-постингом? - PullRequest
2 голосов
/ 21 июня 2009

У меня есть веб-страница, которая использует межстраничную публикацию для публикации на другой целевой странице.

Возникло новое требование, которое означает, что может также быть 4 разных целевых страницы для публикации в зависимости от того, какие данные были введены на клиенте.

Можно ли как-то динамически изменить цель публикации на нескольких страницах на клиенте?

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

Каковы мои альтернативы, переписать страницы, чтобы удалить межстраничную публикацию и сделать перенаправление ответа, передавая данные в сеансе?

Ответы [ 2 ]

2 голосов
/ 21 июня 2009

Да, вы можете изменить action формы. Я расскажу вам, как это сделать.

Во-первых, ваша форма должна иметь имя и URL-адрес действия, указанные в HTML:

<form name="aformiam" method="post" action="/somewhere/to/go.php">

Далее вы захотите запустить JavaScript при отправке формы, поэтому вы должны установить для свойства onClick вашей кнопки отправки функцию, такую ​​как:

<input type="submit" value="Send Form" onClick="return submitForm();" />

Наконец, ваша функция JavaScript для фактического изменения действия формы и отправки формы.

function submitForm() {
  // do anything here you need to determine which URL to post to
  // I am just making an example here
  var targetURL = '/some/url/to/post.php';

  // now we will change the form's action
  document.aformiam.action = targetURL;

  // finally, submit the form by returning true
  return true;
}

Обратите внимание, что на последнем шаге, где мы возвращаем true, это отправляет форму, потому что тип входного элемента - submit, а функция вызывается событием onClick. Если бы это был, например, элемент ввода типа button, тег a или img, то нам нужно было бы запустить отправку формы, используя что-то вроде следующего:

document.aformiam.submit();

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

1 голос
/ 21 июня 2009

Вы можете попробовать изменить атрибут action вашей формы, используя JavaScript, непосредственно перед отправкой формы.

К сожалению, большинство браузеров не поддерживают перенаправление POST. Четные RFC заметки :

RFC 1945 и RFC 2068 указывают, что клиент не разрешен изменить метод по перенаправленному запросу. Однако большинство существующие реализации пользовательских агентов обрабатывают 302, как если бы это было 303 ответ, выполняя GET для значения поля Location независимо оригинального метода запроса. Коды состояния 303 и 307 имеют были добавлены для серверов, которые хотят однозначно дать понять, какие от клиента ожидается такая реакция.

Итак, ИМХО, выбор ограничен либо модификацией JavaScript action, либо повторной отправкой данных с вашего сервера (ваш сервер принимает данные POST, анализирует их и выполняет POST самостоятельно).

Хранение данных в сеансе (или просто возвращение их в POST), а затем повторная отправка их из клиента требует либо поддержки JavaScript (для автоматической отправки формы), либо повторного нажатия кнопки «Отправить». Вы можете рассмотреть возможность использования этого метода в качестве запасного варианта.

Установите значение по умолчанию action, указывающее на ваш резервный скрипт. Если вам удалось изменить action перед отправкой - все в порядке. Если что-то не удалось, как, например, в случае отключения JavaScript - сделайте страницу вывода резервного сценария со скрытым полем данных (чтобы его больше не нужно было изменять) и видимой кнопкой отправки, размещая данные в нужном месте.

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