Saya tidak yakin apakah ini mungkin. Tapi saya bertanya-tanya apakah ada yang tahu cara membuat hyperlink melewati beberapa variabel dan menggunakan POST (seperti formulir) sebagai lawan GET.
Saya tidak yakin apakah ini mungkin. Tapi saya bertanya-tanya apakah ada yang tahu cara membuat hyperlink melewati beberapa variabel dan menggunakan POST (seperti formulir) sebagai lawan GET.
Jawaban:
Anda membuat formulir dengan input tersembunyi yang menahan nilai yang akan diposting, atur tindakan formulir ke url tujuan, dan metode formulir untuk memposting . Kemudian, ketika tautan Anda diklik, memicu fungsi JS yang mengirimkan formulir.
Lihat di sini , misalnya. Contoh ini menggunakan JavaScript murni, tanpa jQuery - Anda dapat memilih ini jika Anda tidak ingin menginstal apa pun lebih dari yang sudah Anda miliki.
<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
? Kami punya get
tanpa formulir, bukan?
Anda tidak perlu JavaScript untuk ini. Hanya ingin memperjelas, karena pada saat jawaban ini diposting, semua jawaban untuk pertanyaan ini melibatkan penggunaan JavaScript dalam beberapa cara.
Anda dapat melakukan ini dengan cukup mudah dengan HTML dan CSS murni dengan membuat formulir dengan bidang tersembunyi yang berisi data yang ingin Anda kirim, lalu menata tombol kirim dari formulir agar terlihat seperti tautan.
Sebagai contoh:
.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>
CSS persis yang Anda gunakan dapat bervariasi tergantung pada bagaimana tautan reguler di situs Anda ditata.
Anda dapat menggunakan fungsi javascript. JQuery memiliki fungsi posting yang bagus jika Anda memutuskan untuk menggunakannya:
<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>
dan memiliki$("#postIt").on("click",function(e) { e.preventDefault(); $.post("WhateverPage.php", { name: "John", time: "2pm" } ); });
Ini adalah pertanyaan lama, tetapi tidak ada jawaban yang memuaskan permintaan secara penuh. Jadi saya menambahkan jawaban lain.
Kode yang diminta, seperti yang saya pahami, seharusnya hanya membuat satu perubahan pada cara kerja hyperlink normal: POST
metode yang seharusnya digunakan GET
. Implikasi langsungnya adalah:
href
POST
Saya menggunakan jquery di sini, tetapi ini bisa dilakukan dengan apis asli (tentu saja lebih sulit dan lebih lama).
<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>
Dan untuk melihat hasilnya, simpan yang berikut ini sebagai reflector.php di direktori yang sama dengan yang Anda simpan di atas.
<h2>Get</h2>
<pre>
<?php print_r($_GET); ?>
</pre>
<h2>Post</h2>
<pre>
<?php print_r($_POST); ?>
</pre>
Contoh kerja lain, menggunakan pendekatan serupa yang diposting: buat formulir html, gunakan javascript untuk mensimulasikan posting. Ini melakukan 2 hal: memposting data ke halaman baru dan membukanya di jendela / tab baru.
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 : Tautan yang mengirimkan formulir tersembunyi dengan POST.
Karena saya menghabiskan banyak waktu untuk memahami semua jawaban ini, dan karena semuanya memiliki detail yang menarik, inilah versi gabungan yang akhirnya bekerja untuk saya dan yang saya sukai karena kesederhanaannya.
Pendekatan saya lagi adalah untuk membuat formulir tersembunyi dan mengirimkannya dengan mengklik tautan di tempat lain di halaman. Tidak masalah di mana di tubuh halaman formulir akan ditempatkan.
Kode untuk formulir:
<form id="myHiddenFormId" action="myAction.php" method="post" style="display: none">
<input type="hidden" name="myParameterName" value="myParameterValue">
</form>
Deskripsi:
The display: none
menyembunyikan formulir. Anda dapat menaruhnya di div atau elemen lain dan mengaturnya display: none
pada elemen.
The type="hidden"
akan menciptakan fild yang tidak akan ditampilkan tetapi datanya akan dikirim ke eitherways tindakan ( lihat W3C ). Saya mengerti bahwa ini adalah tipe input yang paling sederhana.
Kode untuk tautan:
<a href="" onclick="$('#myHiddenFormId').submit(); return false;" title="My link title">My link text</a>
Deskripsi:
Yang kosong href
hanya menargetkan halaman yang sama . Tapi tidak masalah dalam hal ini karena return false
browser akan menghentikan mengikuti tautan. Anda mungkin ingin mengubah perilaku ini tentu saja. Dalam kasus khusus saya, tindakan tersebut berisi pengalihan di akhir.
Itu onclick
digunakan untuk menghindari penggunaan href="javascript:..."
seperti yang dicatat oleh mplungjan . Itu $('#myHiddenFormId').submit();
digunakan untuk mengirimkan formulir (alih-alih mendefinisikan fungsi, karena kodenya sangat kecil).
Tautan ini akan terlihat persis seperti <a>
elemen lainnya . Anda benar-benar dapat menggunakan elemen lain alih-alih <a>
(misalnya a <span>
atau gambar).
Anda dapat menggunakan fungsi jQuery ini
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();
}
Berikut adalah contoh di jsFiddle ( http://jsfiddle.net/S7zUm/ )
Seperti disebutkan dalam banyak posting, ini tidak mungkin secara langsung, tetapi cara yang mudah dan sukses adalah sebagai berikut: Pertama, kami meletakkan formulir di badan halaman html kami, yang tidak memiliki tombol untuk mengirim, dan juga masukannya disembunyikan. Kemudian kami menggunakan fungsi javascript untuk mendapatkan data dan, mengirim formulir. Salah satu keuntungan dari metode ini adalah untuk mengarahkan ulang ke halaman lain, yang tergantung pada kode sisi server. Kode tersebut adalah sebagai berikut: dan sekarang di mana saja Anda memerlukan metode "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>
Saya menyarankan pendekatan yang lebih dinamis, tanpa coding html ke dalam halaman, pertahankan dengan ketat 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()
})
Alih-alih menggunakan javascript, Anda juga bisa menggunakan label yang mengirimkan formulir tersembunyi. Solusi yang sangat sederhana dan kecil. Label bisa di mana saja di html Anda.
<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>
Periksa ini akan membantu Anda
$().redirect('test.php', {'a': 'value1', 'b': 'value2'});