Ich bin mir nicht sicher, ob das überhaupt möglich ist. Aber ich habe mich gefragt, ob jemand weiß, wie man einen Hyperlink dazu bringt, einige Variablen zu übergeben und POST (wie ein Formular) im Gegensatz zu GET zu verwenden.
Ich bin mir nicht sicher, ob das überhaupt möglich ist. Aber ich habe mich gefragt, ob jemand weiß, wie man einen Hyperlink dazu bringt, einige Variablen zu übergeben und POST (wie ein Formular) im Gegensatz zu GET zu verwenden.
Antworten:
Sie erstellen ein Formular mit versteckten Eingängen , die die Werte halten geschrieben, stellen Sie die zu Aktion des Formulars an die Ziel - URL, und die Form Methode zur Post . Wenn Sie dann auf Ihren Link klicken, lösen Sie eine JS-Funktion aus, die das Formular sendet.
Sehen Sie hier , für ein Beispiel. In diesem Beispiel wird reines JavaScript ohne jQuery verwendet. Sie können dies auswählen, wenn Sie nicht mehr installieren möchten, als Sie bereits haben.
<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
festzulegen? Wir hatten get
ohne die Form, nicht wahr?
Sie benötigen dafür kein JavaScript. Ich wollte das nur klarstellen, da zum Zeitpunkt der Veröffentlichung dieser Antwort alle Antworten auf diese Frage auf die eine oder andere Weise die Verwendung von JavaScript beinhalten.
Sie können dies mit reinem HTML und CSS ziemlich einfach tun, indem Sie ein Formular mit ausgeblendeten Feldern erstellen, die die Daten enthalten, die Sie senden möchten, und dann die Schaltfläche "Senden" des Formulars so gestalten, dass es wie ein Link aussieht.
Beispielsweise:
.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>
Das genaue CSS, das Sie verwenden, kann variieren, je nachdem, wie reguläre Links auf Ihrer Website gestaltet sind.
Sie können Javascript-Funktionen verwenden. JQuery hat eine nette Post-Funktion eingebaut, wenn Sie sich dafür entscheiden, sie zu verwenden:
<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>
und haben$("#postIt").on("click",function(e) { e.preventDefault(); $.post("WhateverPage.php", { name: "John", time: "2pm" } ); });
Dies ist eine alte Frage, aber keine der Antworten erfüllt die Anfrage vollständig. Also füge ich eine weitere Antwort hinzu.
Der angeforderte Code sollte meines Wissens nur eine Änderung an der Funktionsweise normaler Hyperlinks vornehmen: Die POST
Methode sollte anstelle von verwendet werden GET
. Die unmittelbaren Auswirkungen wären:
href
POST
Ich benutze hier jquery, aber dies könnte mit nativen apis gemacht werden (härter und natürlich länger).
<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>
Um das Ergebnis anzuzeigen, speichern Sie Folgendes als Reflector.php in demselben Verzeichnis, in dem Sie das oben Gespeicherte gespeichert haben.
<h2>Get</h2>
<pre>
<?php print_r($_GET); ?>
</pre>
<h2>Post</h2>
<pre>
<?php print_r($_POST); ?>
</pre>
Ein weiteres Arbeitsbeispiel mit einem ähnlichen Ansatz: Erstellen Sie ein HTML-Formular und simulieren Sie den Beitrag mit Javascript. Dies bewirkt zwei Dinge: Daten auf einer neuen Seite veröffentlichen und in einem neuen Fenster / einer neuen Registerkarte öffnen.
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 : Ein Link, der ein verstecktes Formular mit POST sendet.
Da ich viel Zeit damit verbracht habe, all diese Antworten zu verstehen, und da alle einige interessante Details enthalten, ist hier die kombinierte Version, die schließlich für mich funktioniert hat und die ich wegen ihrer Einfachheit bevorzuge.
Mein Ansatz ist es erneut, ein verstecktes Formular zu erstellen und es durch Klicken auf einen Link an einer anderen Stelle auf der Seite einzureichen. Es spielt keine Rolle, wo im Hauptteil der Seite das Formular platziert wird.
Der Code für das Formular:
<form id="myHiddenFormId" action="myAction.php" method="post" style="display: none">
<input type="hidden" name="myParameterName" value="myParameterValue">
</form>
Beschreibung:
Das display: none
versteckt die Form. Sie können es alternativ in ein div oder ein anderes Element einfügen und das display: none
auf das Element setzen.
Das type="hidden"
erstellt ein Feld, das nicht angezeigt wird, dessen Daten jedoch trotzdem an die Aktion übertragen werden ( siehe W3C ). Ich verstehe, dass dies der einfachste Eingabetyp ist.
Der Code für den Link:
<a href="" onclick="$('#myHiddenFormId').submit(); return false;" title="My link title">My link text</a>
Beschreibung:
Das leere Ziel zielthref
nur auf dieselbe Seite ab . In diesem Fall spielt es jedoch keine Rolle, da return false
der Browser dadurch nicht mehr dem Link folgen kann. Möglicherweise möchten Sie dieses Verhalten natürlich ändern. In meinem speziellen Fall enthielt die Aktion am Ende eine Umleitung.
Das onclick
wurde verwendet , zu vermeiden , mit href="javascript:..."
wie durch mplungjan bemerkt . Das $('#myHiddenFormId').submit();
wurde zum Senden des Formulars verwendet (anstatt eine Funktion zu definieren, da der Code sehr klein ist).
Dieser Link sieht genauso aus wie jedes andere <a>
Element. Sie können tatsächlich jedes andere Element anstelle von <a>
(zum Beispiel ein <span>
oder ein Bild) verwenden.
Sie können diese jQuery-Funktion verwenden
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();
}
Hier ist ein Beispiel in jsFiddle ( http://jsfiddle.net/S7zUm/ )
Wie in vielen Beiträgen erwähnt, ist dies nicht direkt möglich, aber ein einfacher und erfolgreicher Weg ist wie folgt: Zuerst fügen wir ein Formular in den Hauptteil unserer HTML-Seite ein, das keine Schaltflächen für die Übermittlung und auch deren Eingaben enthält sind versteckt. Dann verwenden wir eine Javascript-Funktion, um die Daten abzurufen und das Formular zu senden. Einer der Vorteile dieser Methode besteht darin, auf andere Seiten umzuleiten, was vom serverseitigen Code abhängt. Der Code lautet wie folgt: und jetzt überall dort, wo Sie eine "POST" -Methode benötigen:
<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>
Ich schlage einen dynamischeren Ansatz vor, ohne HTML-Codierung in die Seite, halten Sie es streng 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()
})
Anstelle von Javascript können Sie auch ein Etikett verwenden, das ein verstecktes Formular sendet. Sehr einfache und kleine Lösung. Das Etikett kann sich überall in Ihrem HTML befinden.
<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>
Überprüfen Sie dies, es wird Ihnen helfen
$().redirect('test.php', {'a': 'value1', 'b': 'value2'});