Jawaban:
Menggunakan window.location.hrefitu tidak mungkin untuk mengirim permintaan POST.
Yang harus Anda lakukan adalah menyiapkan formtag dengan bidang data di dalamnya, menyetel actionatribut formulir ke URL dan methodatribut ke POST, lalu memanggil submitmetode pada formtag tersebut.
form, jadi semuanya dikirim bersama secara otomatis?
$("#myForm").submit(). Formulir - yang tidak akan terlihat, dan hanya digunakan untuk mengirimkan nilai dari kode sisi klien Anda, bukan masukan pengguna - tidak akan pernah ditampilkan atau digunakan, dan halaman akan disegarkan.
Tambahkan formulir ke HTML Anda, seperti ini:
<form style="display: none" action="/the/url" method="POST" id="form">
<input type="hidden" id="var1" name="var1" value=""/>
<input type="hidden" id="var2" name="var2" value=""/>
</form>
dan gunakan JQuery untuk mengisi nilai-nilai ini (tentu saja Anda juga dapat menggunakan javascript untuk melakukan hal serupa)
$("#var1").val(value1);
$("#var2").val(value2);
Lalu akhirnya kirimkan formulir
$("#form").submit();
di sisi server Anda seharusnya bisa mendapatkan data yang Anda kirim dengan memeriksa var1dan var2, cara melakukannya tergantung pada bahasa sisi server yang Anda gunakan.
Gunakan file ini: "jquery.redirect.js"
$("#btn_id").click(function(){
$.redirect(http://localhost/test/test1.php,
{
user_name: "khan",
city : "Meerut",
country : "country"
});
});
});
Seperti yang dikatakan di jawaban lain, tidak ada cara untuk membuat permintaan POST menggunakan window.location.href, untuk melakukannya Anda dapat membuat formulir dan mengirimkannya segera.
Anda dapat menggunakan fungsi ini:
function postForm(path, params, method) {
method = method || 'post';
var form = document.createElement('form');
form.setAttribute('method', method);
form.setAttribute('action', path);
for (var key in params) {
if (params.hasOwnProperty(key)) {
var hiddenField = document.createElement('input');
hiddenField.setAttribute('type', 'hidden');
hiddenField.setAttribute('name', key);
hiddenField.setAttribute('value', params[key]);
form.appendChild(hiddenField);
}
}
document.body.appendChild(form);
form.submit();
}
postForm('mysite.com/form', {arg1: 'value1', arg2: 'value2'});
Jawaban singkatnya: tidak. window.location.hreftidak mampu melewatkan data POST.
Jawaban yang agak lebih memuaskan: Anda dapat menggunakan fungsi ini untuk mengkloning semua data formulir Anda dan mengirimkannya.
var submitMe = document.createElement("form");
submitMe.action = "YOUR_URL_HERE"; // Remember to change me
submitMe.method = "post";
submitMe.enctype = "multipart/form-data";
var nameJoiner = "_";
// ^ The string used to join form name and input name
// so that you can differentiate between forms when
// processing the data server-side.
submitMe.importFields = function(form){
for(k in form.elements){
if(input = form.elements[k]){
if(input.type!="submit"&&
(input.nodeName=="INPUT"
||input.nodeName=="TEXTAREA"
||input.nodeName=="BUTTON"
||input.nodeName=="SELECT")
){
var output = input.cloneNode(true);
output.name = form.name + nameJoiner + input.name;
this.appendChild(output);
}
}
}
}
submitMe.importFields(form_element);untuk masing-masing dari tiga formulir yang ingin Anda kirimkan. <input name="email">in <form name="login">, nama yang dikirimkan akan menjadi login_name. nameJoinervariabel menjadi sesuatu selain _agar tidak bertentangan dengan skema penamaan input Anda.submitMe.submit();sesederhana ini
$.post({url: "som_page.php",
data: { data1: value1, data2: value2 }
).done(function( data ) {
$( "body" ).html(data);
});
});
Saya harus menyelesaikan ini untuk membuat kunci layar aplikasi saya di mana saya harus meneruskan data sensitif sebagai pengguna dan url tempat dia bekerja. Kemudian buat fungsi yang menjalankan kode ini
done()set fungsiwindow.location.href
Sudahkah Anda mempertimbangkan untuk hanya menggunakan Penyimpanan Lokal / Sesi? -atau- Bergantung pada kompleksitas dari apa yang Anda bangun; Anda bahkan dapat menggunakan indexDB.
catatan :
Local storagedan indexDBtidak aman - jadi Anda ingin menghindari penyimpanan data sensitif / pribadi (misalnya nama, alamat, alamat email, DOB, dll) di salah satu dari ini.
Session Storage adalah opsi yang lebih aman untuk apa pun yang sensitif, itu hanya dapat diakses oleh asal yang mengatur item dan juga membersihkan segera setelah browser / tab ditutup.
IndexDBsedikit lebih [tetapi tidak lebih] rumit dan 30MB noSQL databasedibangun di setiap browser (tetapi pada dasarnya bisa tidak terbatas jika pengguna memilih) -> lain kali Anda menggunakan dokumen Google, buka DevTools -> aplikasi -> IndexDB dan mencapai puncaknya. [peringatan spoiler: itu dienkripsi].
Berfokus pada Localdan Session Storage; keduanya sangat mudah digunakan:
// To Set
sessionStorage.setItem( 'key' , 'value' );
// e.g.
sessionStorage.setItem( 'formData' , { name: "Mr Manager", company: "Bluth's Frozen Bananas", ... } );
// Get The Data
const fromData = sessionStorage.getItem( 'key' );
// e.g. (after navigating to next location)
const fromData = sessionStorage.getItem( 'formData' );
// Remove
sessionStorage.removeItem( 'key' );
// Remove _all_ saved data sessionStorage
sessionStorage.clear( );
Jika sederhana bukanlah hal Anda -atau- mungkin Anda ingin keluar dari jalan raya dan mencoba pendekatan yang berbeda secara bersamaan -> Anda mungkin dapat menggunakan shared web worker... Anda tahu, hanya untuk iseng.
Anda dapat menggunakan GET sebagai ganti pass, tetapi jangan gunakan metode ini untuk nilai-nilai penting,
function passIDto(IDval){
window.location.href = "CustomerBasket.php?oridd=" + IDval ;
}
Di CustomerBasket.php
<?php
$value = $_GET["oridd"];
echo $value;
?>
window.location.hrefmelakukan permintaan GET untuk URL baru, bukan POST.