it-roy-ru.com

перейти на другую страницу с запросом по почте через ссылку

<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>    
<script type="text/javascript">
    function DoPost(){
      $.post("index.html", { name: "John", time: "2pm" } );
   }
    </script>
</head>

<body>
<a href="javascript:DoPost()">GO</a>

</body>
</html>

Я сделал функцию и пытался вызвать эту функцию, внутри этой функции я упомянул URL и данные, как упомянуто здесь . Но это не работает для меня.

ПРИМЕЧАНИЕ: Даже если я упомянул в заголовке своего поста, я также хочу пояснить, что я хочу перейти на другую страницу с помощью метода POST через простую гиперссылку.

14
Ravi

Создайте HTML-форму со всеми данными, которые вам нужно отправить, и укажите в качестве действия страницу, которую вы должны переслать пользователю.

<form method="post" id="theForm" action="REDIRECT_PAGE.php">

Затем поместите некоторые скрытые поля в этой форме.

<input type="hidden" name="name" value="John">
<input type="hidden" name="time" value="2pm">
</form>

Оберните это внутри вашей функции doRedirect, и перенаправление будет работать при правильной отправке ваших данных POST.

document.getElementById('theForm').submit()

В качестве примечания вы можете перенаправить пользователя на страницу .php, а не на страницу .html, если вам нужно прочитать данные POST. Это зависит от конфигурации вашего сервера, но по умолчанию я не думаю, что вы можете запустить PHP код внутри файла .html.

15
Saturnix

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

Часть 1: Решение

Обычное решение для навигации по запросу POST - это форма, которую использует принятый ответ. Я буду основываться на этом, представляя решение для программного создания форм с использованием DOM.

var payload = {
  name: 'John',
  time: '2pm'
};
var form = document.createElement('form');
form.style.visibility = 'hidden'; // no user interaction is necessary
form.method = 'POST'; // forms by default use GET query strings
form.action = 'index.html';
for (key in Object.keys(payload)) {
  var input = document.createElement('input');
  input.name = key;
  input.value = payload[key];
  form.appendChild(input); // add key/value pair to form
}
document.body.appendChild(form); // forms cannot be submitted outside of body
form.submit(); // send the payload and navigate

Я использовал index.html в соответствии с вашим исходным кодом, но я бы принял совет принятого ответа и использовал PHP для принятия и обработки данных POST.

Часть 2: проблема

Основная проблема вашего исходного решения заключается в том, что он использовал $.post, вспомогательную функцию, построенную поверх $.ajax. AJAX предназначен для использования при получении данных с сервера и использовании их на текущей странице, а не при переходе на другую страницу.

7
robbie0630

Это должно работать нормально ... Подобно одному ответу, но лучше.

var payload = {
  name: 'John',
  time: '2pm'
};
var form = document.createElement('form');
form.style.visibility = 'hidden';
form.method = 'POST';
form.action = link;
$.each(Object.keys(payload), function(index, key) {
var input = document.createElement('input');
    input.name = key;
    input.value = payload[key];
    form.appendChild(input)
});
document.body.appendChild(form);
form.submit();
1
IamMHussain

Наконец-то я это сделал, но не совсем так, как хотел. Но это полезно для меня. Теперь делимся для других

<html>
  <head>
    <script type="text/javascript">
      function DoPost() {
        document.postlink.submit();
      }   
    </script>
  </head>

  <body>
    <a href="javascript:DoPost()">GO</a>
    <form action="demo.php" name="postlink" method="post">
      <input type="hidden" name="name" value="this is my POST data">
    </form>
  </body>
</html>
0
Ravi
function js_navigate_with_post(js_url, js_post_params)
{
    var js_html='';
    js_html += "<form id='js_navigate_with_post' method='post' action='"+js_url+"'>\n";
    js_html +=  "<input type='hidden' name='js_navigate_with_post' value='true'>\n";
    for (var js_key in js_post_params) {
        if (js_post_params.hasOwnProperty(js_key))
        {
            js_html +=  "<input type='hidden' name='"+js_key+"' value='"+js_post_params[js_key]+"'>\n";
        }
    }
    js_html += "</form>\n";
    jQuery('body').append(js_html);
    jQuery('#js_navigate_with_post').submit();
}
0
ihorsl