Можно ли иметь несколько целевых страниц с кросс-постингом?

StackOverflow https://stackoverflow.com/questions/1023529

Вопрос

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

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

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

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

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

Это было полезно?

Решение

Да, вы, безусловно, можете изменить 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. Если это так, опубликуйте комментарий с указанием этого, и я приведу пример для этого.

Другие советы

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

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

  

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top