Je ne sais pas si c'est même possible. Mais je me demandais si quelqu'un sait comment faire passer un hyperlien à certaines variables et utiliser POST (comme un formulaire) par opposition à GET.
Je ne sais pas si c'est même possible. Mais je me demandais si quelqu'un sait comment faire passer un hyperlien à certaines variables et utiliser POST (comme un formulaire) par opposition à GET.
Réponses:
Vous créez un formulaire avec des entrées masquées qui contiennent les valeurs à publier, définissez l' action du formulaire sur l'URL de destination et la méthode du formulaire à publier . Ensuite, lorsque vous cliquez sur votre lien, déclenchez une fonction JS qui soumet le formulaire.
Voir ici , pour un exemple. Cet exemple utilise du JavaScript pur, sans jQuery - vous pouvez le choisir si vous ne voulez rien installer de plus que ce que vous avez déjà.
<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>
GET
? Nous avions get
sans formulaire, non?
Vous n'avez pas besoin de JavaScript pour cela. Je voulais juste que ce soit clair, car au moment où cette réponse a été publiée, toutes les réponses à cette question impliquaient l'utilisation de JavaScript d'une manière ou d'une autre.
Vous pouvez le faire assez facilement avec du HTML et du CSS purs en créant un formulaire avec des champs cachés contenant les données que vous souhaitez soumettre, puis en stylisant le bouton de soumission du formulaire pour ressembler à un lien.
Par exemple:
.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>
Le CSS exact que vous utilisez peut varier selon le style des liens réguliers sur votre site.
Vous pouvez utiliser les fonctions javascript. JQuery a une belle fonction de publication intégrée si vous décidez de l'utiliser:
<script language="javascript">
function DoPost(){
$.post("WhateverPage.php", { name: "John", time: "2pm" } ); //Your values here..
}
</script>
<a href="javascript:DoPost()">Click Here</A>
$.post('page.php', {param: 1}, function() { window.location.href = 'page'.php' });
<a href="whyjavascript.html" id="postIt">Click Here</a>
et avoir$("#postIt").on("click",function(e) { e.preventDefault(); $.post("WhateverPage.php", { name: "John", time: "2pm" } ); });
C'est une vieille question, mais aucune des réponses ne satisfait entièrement la demande. J'ajoute donc une autre réponse.
Si je comprends bien, le code demandé ne devrait apporter qu'une seule modification au fonctionnement des hyperliens normaux: la POST
méthode doit être utilisée à la place de GET
. Les implications immédiates seraient:
href
POST
J'utilise jquery ici, mais cela pourrait être fait avec des API natives (plus difficiles et plus longues bien sûr).
<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>
Et pour voir le résultat, enregistrez ce qui suit en tant que reflector.php dans le même répertoire que celui ci-dessus.
<h2>Get</h2>
<pre>
<?php print_r($_GET); ?>
</pre>
<h2>Post</h2>
<pre>
<?php print_r($_POST); ?>
</pre>
Un autre exemple de travail, en utilisant une approche similaire publiée: créez un formulaire html, utilisez javascript pour simuler la publication. Cela fait 2 choses: publier des données sur une nouvelle page et les ouvrir dans une nouvelle fenêtre / un nouvel onglet.
HTML
<form name='myForm' target="_blank" action='newpage.html' method='post'>
<input type="hidden" name="thisIsTheParameterName" value="testDataToBePosted"/>
</form>
Javascript
document.forms["myForm"].submit();
HTML + JQuery : lien qui soumet un formulaire masqué avec POST.
Depuis que j'ai passé beaucoup de temps à comprendre toutes ces réponses, et comme elles ont toutes des détails intéressants, voici la version combinée qui a finalement fonctionné pour moi et que je préfère pour sa simplicité.
Mon approche consiste à nouveau à créer un formulaire caché et à le soumettre en cliquant sur un lien ailleurs dans la page. Peu importe où dans le corps de la page le formulaire sera placé.
Le code du formulaire:
<form id="myHiddenFormId" action="myAction.php" method="post" style="display: none">
<input type="hidden" name="myParameterName" value="myParameterValue">
</form>
La description:
Le display: none
masque le formulaire. Vous pouvez également le placer dans un div ou un autre élément et définir display: none
l'élément sur l'élément.
Le type="hidden"
va créer un fild qui ne sera pas affiché mais ses données seront transmises à l'action de toute façon ( voir W3C ). Je comprends que c'est le type d'entrée le plus simple.
Le code du lien:
<a href="" onclick="$('#myHiddenFormId').submit(); return false;" title="My link title">My link text</a>
La description:
Le vide href
ne cible que la même page . Mais cela n'a pas vraiment d'importance dans ce cas, car return false
cela empêchera le navigateur de suivre le lien. Vous pouvez bien sûr changer ce comportement. Dans mon cas spécifique, l'action contenait une redirection à la fin.
Le a onclick
été utilisé pour éviter d'utiliser href="javascript:..."
comme indiqué par mplungjan . Le a $('#myHiddenFormId').submit();
été utilisé pour soumettre le formulaire (au lieu de définir une fonction, car le code est très petit).
Ce lien ressemblera exactement à tout autre <a>
élément. Vous pouvez réellement utiliser n'importe quel autre élément à la place de <a>
(par exemple un <span>
ou une image).
Vous pouvez utiliser cette fonction 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();
}
Voici un exemple dans jsFiddle ( http://jsfiddle.net/S7zUm/ )
Comme mentionné dans de nombreux articles, ce n'est pas directement possible, mais un moyen simple et efficace est le suivant: Tout d'abord, nous mettons un formulaire dans le corps de notre page html, qui n'a pas de boutons pour la soumission, ainsi que ses entrées sont cachés. Ensuite, nous utilisons une fonction javascript pour obtenir les données et envoyer le formulaire. L'un des avantages de cette méthode est de rediriger vers d'autres pages, qui dépend du code côté serveur. Le code est le suivant: et maintenant, partout où vous avez besoin d'un pour être dans la méthode "POST":
<script type="text/javascript" language="javascript">
function post_link(data){
$('#post_form').find('#form_input').val(data);
$('#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>
Je suggère une approche plus dynamique, sans codage html dans la page, gardez-la strictement JS:
$("a.AS-POST").on('click', e => {
e.preventDefault()
let frm = document.createElement('FORM')
frm.id='frm_'+Math.random()
frm.method='POST'
frm.action=e.target.href
document.body.appendChild(frm)
frm.submit()
})
Au lieu d'utiliser javascript, vous pouvez également utiliser une étiquette envoyant un formulaire masqué. Solution très simple et petite. L'étiquette peut être n'importe où dans votre html.
<form style="display: none" action="postUrl" method="post">
<button type="submit" id="button_to_link"> </button>
</form>
<label style="text-decoration: underline" for="button_to_link"> link that posts </label>
Vérifiez cela, cela vous aidera
$().redirect('test.php', {'a': 'value1', 'b': 'value2'});