Используйте ссылку POST вместо GET

Я не уверен, что это возможно. Но мне было интересно, знает ли кто-нибудь, как гиперссылка передает некоторые переменные и использует POST (как форму), а не GET.

Ответ 1

Вы создаете форму со скрытыми вводами, в которой хранятся значения, которые должны быть отправлены, установите действие формы на целевой URL и метод формы для публикации. Затем, когда ваша ссылка будет нажата, вызовите функцию JS, которая отправит форму.

См. здесь, например. В этом примере используется чистый JavaScript, без jQuery — вы можете выбрать это, если не хотите устанавливать что-либо большее, чем у вас уже есть.

<form name="myform" action="handle-data.php" method="post">
  <label for="query">Search:</label>
  <input type="text" name="query" id="query"/>
  <button>Search</button>
</form>

<script>
var button = document.querySelector('form[name="myform"] > button');
button.addEventListener(function() {
  document.querySelector("form[name="myform"]").submit();
});
</script>

Ответ 2

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

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

Например:

.inline {
  display: inline;
}

.link-button {
  background: none;
  border: none;
  color: blue;
  text-decoration: underline;
  cursor: pointer;
  font-size: 1em;
  font-family: serif;
}
.link-button:focus {
  outline: none;
}
.link-button:active {
  color:red;
}
<a href="some_page">This is a regular link</a>

<form method="post" action="some_page" class="inline">
  <input type="hidden" name="extra_submit_param" value="extra_submit_value">
  <button type="submit" name="submit_param" value="submit_value" class="link-button">
    This is a link that sends a POST request
  </button>
</form>

Ответ 3

Вы можете использовать функции javascript. У JQuery есть хорошая функция post, встроенная, если вы решите ее использовать:

Сообщение JQuery

<script language="javascript"> 

   function DoPost(){
      $.post("WhateverPage.php", { name: "John", time: "2pm" } );  //Your values here..
   }

</script>


<a href="javascript:DoPost()">Click Here</A> 

Ответ 4

Это старый вопрос, но ни один из ответов не удовлетворяет запросу в полном объеме. Поэтому я добавляю еще один ответ.

Запрашиваемый код, как я понимаю, должен сделать только одно изменение способа работы нормальных гиперссылок: вместо GET следует использовать метод POST. Ближайшие последствия:

  • При щелчке ссылки мы должны перезагрузить вкладку в URL-адрес href
  • Поскольку метод POST, у нас не должно быть строки запроса в URL-адресе целевой страницы, которую мы загружаем
  • Эта страница должна получать данные в параметрах (имена и значения) на POST

Я использую jquery здесь, но это можно сделать с помощью native apis (сложнее и дольше, конечно).

<html>
<head>
    <script src="path/to/jquery.min.js" type="text/javascript"></script>
    <script>
        $(document).ready(function() {

            $("a.post").click(function(e) {
                e.stopPropagation();
                e.preventDefault();
                var href = this.href;
                var parts = href.split('?');
                var url = parts[0];
                var params = parts[1].split('&');
                var pp, inputs = '';
                for(var i = 0, n = params.length; i < n; i++) {
                    pp = params[i].split('=');
                    inputs += '<input type="hidden" name="' + pp[0] + '" value="' + pp[1] + '" />';
                }
                $("body").append('<form action="'+url+'" method="post" id="poster">'+inputs+'</form>');
                $("#poster").submit();
            });
        });
    </script>
</head>
<body>
    <a class="post" href="reflector.php?color=blue&weight=340&model=x-12&price=14.800">Post it!</a><br/>
    <a href="reflector.php?color=blue&weight=340&model=x-12&price=14.800">Normal link</a>
</body>
</html>

И чтобы увидеть результат, сохраните следующее как reflector.php в том же каталоге, в котором вы сохранили выше.

<h2>Get</h2>
<pre>
<?php print_r($_GET); ?>
</pre>

<h2>Post</h2>
<pre>
<?php print_r($_POST); ?>
</pre>

Ответ 5

Еще один рабочий пример, используя аналогичный подход: создайте форму html, используйте javascript для имитации сообщения. Это делает 2 вещи: отправьте данные на новую страницу и откройте ее в новом окне/вкладке.

HTML

<form name='myForm' target="_blank" action='newpage.html' method='post'>
<input type="hidden" name="thisIsTheParameterName" value="testDataToBePosted"/>
</form>

JavaScript

document.forms["myForm"].submit();

Ответ 6

Это невозможно с использованием необработанного HTML, хотя вы можете использовать jQuery для добавления обработчика событий click к ссылке, которая могла бы использовать post, чтобы выдать POST.

Ответ 7

HTML + JQuery: ссылка, которая отправляет скрытую форму с помощью POST.

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

Мой подход снова создаст скрытую форму и отправьте ее, нажав ссылку где-то еще на странице. Неважно, где в теле страницы будет размещена форма.

Код формы:

<form id="myHiddenFormId" action="myAction.php" method="post" style="display: none">
  <input type="hidden" name="myParameterName" value="myParameterValue">
</form>

Описание:

Скрывает форму display: none. Вы также можете поместить его в div или другой элемент и установить display: none в элементе.

type="hidden" создаст fild, который не будет отображаться, но его данные будут переданы в действие либо (см. W3C), Я понимаю, что это самый простой тип ввода.

Код ссылки:

<a href="" onclick="$('#myHiddenFormId').submit(); return false;" title="My link title">My link text</a>

Описание:

Пустое href just нацелено на одну и ту же страницу. Но в данном случае это не имеет большого значения, так как return false остановит браузер после ссылки. Конечно, вы можете изменить это поведение. В моем конкретном случае действие содержало перенаправление в конце.

onclick использовался, чтобы избежать использования href="javascript:..." как отмеченного mplungjan. $('#myHiddenFormId').submit(); использовался для отправки формы (вместо определения функции, так как код очень мал).

Эта ссылка будет выглядеть точно так же, как и любой другой элемент <a>. Фактически вы можете использовать любой другой элемент вместо <a> (например, a <span> или изображение).

Ответ 8

Вы можете использовать эту функцию jQuery

function makePostRequest(url, data) {
    var jForm = $('<form></form>');
    jForm.attr('action', url);
    jForm.attr('method', 'post');
    for (name in data) {
        var jInput = $("<input>");
        jInput.attr('name', name);
        jInput.attr('value', data[name]);
        jForm.append(jInput);
    }
    jForm.submit();
}

Вот пример в jsFiddle (http://jsfiddle.net/S7zUm/)

Ответ 9

Проверьте это, это поможет вам

$().redirect('test.php', {'a': 'value1', 'b': 'value2'});

Ответ 10

Как упоминалось во многих постах, это невозможно напрямую, но простой и успешный способ заключается в следующем: во-первых, мы помещаем форму в тело нашей html-страницы, в которой нет кнопок для отправки, а также для ввода. скрыты Затем мы используем функцию javascript, чтобы получить данные и отправить форму. Одним из преимуществ этого метода является перенаправление на другие страницы, что зависит от кода на стороне сервера. Код выглядит следующим образом: теперь вам нужно использовать метод POST:

<script type="text/javascript" language="javascript">
function post_link(data){

    $('#post_form').find('#form_input').val(a_user);
    $('#post_form').submit();
};
</script>

   <form id="post_form" action="anywhere/you/want/" method="POST">
 {% csrf_token %}
    <input id="form_input" type="hidden" value="" name="form_input">
</form>

<a href="javascript:{}" onclick="javascript:post_link('data');">post link is ready</a>