Bunun mümkün olup olmadığından emin değilim. Ama ben bir köprü bazı değişkenler geçmek ve GET yerine POST (bir form gibi) nasıl kullanılacağını bilmek merak ediyordum.
Bunun mümkün olup olmadığından emin değilim. Ama ben bir köprü bazı değişkenler geçmek ve GET yerine POST (bir form gibi) nasıl kullanılacağını bilmek merak ediyordum.
Yanıtlar:
Sen değerleri ayarlamak, asılacak tutun gizli girişler ile bir form oluşturmak eylemi hedef url formun ve form yöntemini yazı . Ardından bağlantınız tıklatıldığında formu gönderen bir JS işlevi tetiklenir.
Bir örnek için buraya bakın . Bu örnek, jQuery olmadan saf JavaScript kullanıyor - zaten sahip olduğunuzdan daha fazla bir şey yüklemek istemiyorsanız bunu seçebilirsiniz.
<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
? get
Form olmadan vardı , değil mi?
Bunun için JavaScript'e ihtiyacınız yok. Sadece bunu açıklığa kavuşturmak istedim, bu cevabın yayınlandığı tarihten itibaren, bu sorunun tüm cevapları JavaScript'in bir şekilde kullanılmasını içeriyor.
Göndermek istediğiniz verileri içeren gizli alanlara sahip bir form oluşturarak ve ardından formun gönderme düğmesini bir bağlantı gibi görünecek şekilde şekillendirerek bunu saf HTML ve CSS ile kolayca yapabilirsiniz .
Örneğin:
.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>
Kullandığınız tam CSS, sitenizdeki normal bağlantıların tarzına bağlı olarak değişebilir.
Javascript işlevlerini kullanabilirsiniz. JQuery, kullanmaya karar verirseniz yerleşik güzel bir yazı işlevine sahiptir:
<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>
ve yapmak istiyorsanız$("#postIt").on("click",function(e) { e.preventDefault(); $.post("WhateverPage.php", { name: "John", time: "2pm" } ); });
Bu eski bir soru, ancak cevapların hiçbiri isteği tam olarak karşılamıyor. Bu yüzden başka bir cevap ekliyorum.
İstediğim kod, anladığım kadarıyla, normal köprülerin çalışma biçiminde yalnızca bir değişiklik POST
yapmalıdır : yöntem yerine kullanılmalıdır GET
. Anında çıkarımlar:
href
POST
Burada jquery kullanıyorum, ama bu yerli apis (daha zor ve daha uzun tabii ki) ile yapılabilir.
<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>
Ve sonucu görmek için, aşağıdakileri kaydettiğiniz dizine reflector.php olarak kaydedin.
<h2>Get</h2>
<pre>
<?php print_r($_GET); ?>
</pre>
<h2>Post</h2>
<pre>
<?php print_r($_POST); ?>
</pre>
Yayınlanan benzer yaklaşımı kullanarak başka bir çalışma örneği: bir html formu oluşturun, yayını simüle etmek için javascript kullanın. Bu 2 şey yapar: verileri yeni bir sayfaya gönderin ve yeni bir pencerede / sekmede açın.
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 : POST ile gizli bir form gönderen bir bağlantı.
Tüm bu cevapları anlamak için çok zaman harcadığım ve hepsinin bazı ilginç detayları olduğu için, sonunda benim için çalışan ve basitliği için tercih ettiğim kombine versiyon.
Benim yaklaşımım yine gizli bir form oluşturmak ve sayfanın başka bir yerinde bir bağlantıyı tıklatarak göndermek. Formun sayfanın gövdesine nereye yerleştirileceği önemli değildir.
Formun kodu:
<form id="myHiddenFormId" action="myAction.php" method="post" style="display: none">
<input type="hidden" name="myParameterName" value="myParameterValue">
</form>
Açıklama:
display: none
Formu gizler. Alternatif olarak bir div veya başka bir öğeye koyabilir display: none
ve öğenin üzerine ayarlayabilirsiniz .
type="hidden"
Gösterilmeyecek bir fild yaratacaktır ama veri işlem eitherways (iletilir W3C bakınız ). Bunun en basit girdi türü olduğunu anlıyorum.
Bağlantının kodu:
<a href="" onclick="$('#myHiddenFormId').submit(); return false;" title="My link title">My link text</a>
Açıklama:
Boş href
sadece aynı sayfayı hedefleyen . Ancak bu durumda gerçekten önemli değil çünkü return false
tarayıcı bağlantıyı takip etmeyi durduracak. Elbette bu davranışı değiştirmek isteyebilirsiniz. Benim özel durumumda, eylem sonunda bir yönlendirme içeriyordu.
onclick
Kullanmaktan kaçınmak için kullanılmıştır href="javascript:..."
olarak mplungjan tarafından belirtildiği . $('#myHiddenFormId').submit();
(Kod çok küçük olduğu için, bunun yerine bir işlev tanımlama) formu göndermek için kullanıldı.
Bu bağlantı tam olarak diğer herhangi bir <a>
öğeye benzeyecektir . Aslında <a>
(örneğin a <span>
veya resim) yerine başka bir öğe kullanabilirsiniz .
Bu jQuery işlevini kullanabilirsiniz
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();
}
Aşağıda jsFiddle'daki bir örnek ( http://jsfiddle.net/S7zUm/ )
Birçok gönderide belirtildiği gibi, bu doğrudan mümkün değildir, ancak kolay ve başarılı bir yol şu şekildedir: İlk olarak, html sayfamızın gövdesine, gönderme için herhangi bir düğmenin bulunmadığı bir form koyduk. Gizlenmiş. Sonra verileri almak ve formu göndermek için bir javascript işlevi kullanırız. Bu yöntemin avantajlarından biri, sunucu tarafı koduna bağlı olan diğer sayfalara yönlendirmektir. Kod aşağıdaki gibidir: ve şimdi her yerde bir "POST" yönteminde olması gerekir:
<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>
Ben html kodlama sayfaya olmadan, daha dinamik bir yaklaşım öneririz, kesinlikle JS tutun:
$("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()
})
Javascript kullanmak yerine, gizli bir form gönderen bir etiket de kullanabilirsiniz. Çok basit ve küçük bir çözüm. Etiket, HTML'nizin herhangi bir yerinde olabilir.
<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>
Bunu kontrol et, sana yardımcı olacak
$().redirect('test.php', {'a': 'value1', 'b': 'value2'});