Câu trả lời:
Sử dụng window.location.href
, không thể gửi yêu cầu ĐĂNG.
Những gì bạn phải làm là thiết lập một form
thẻ với các trường dữ liệu trong đó, đặt action
thuộc tính của biểu mẫu thành URL và method
thuộc tính thành POST, sau đó gọi submit
phương thức trên form
thẻ.
form
để mọi thứ được gửi cùng nhau một cách tự động?
$("#myForm").submit()
. Biểu mẫu - sẽ ẩn và chỉ được sử dụng để gửi các giá trị từ mã phía máy khách của bạn, không phải do người dùng nhập - sẽ không bao giờ được hiển thị cũng như không được sử dụng theo cách khác và trang sẽ được làm mới.
Thêm biểu mẫu vào HTML của bạn, giống như sau:
<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>
và sử dụng JQuery để điền các giá trị này (tất nhiên bạn cũng có thể sử dụng javascript để làm điều gì đó tương tự)
$("#var1").val(value1);
$("#var2").val(value2);
Sau đó cuối cùng gửi biểu mẫu
$("#form").submit();
ở phía máy chủ, bạn sẽ có thể lấy dữ liệu bạn đã gửi bằng cách kiểm tra var1
và var2
cách thực hiện việc này tùy thuộc vào ngôn ngữ phía máy chủ bạn đang sử dụng.
Sử dụng tệp này: "jquery.redirect.js"
$("#btn_id").click(function(){
$.redirect(http://localhost/test/test1.php,
{
user_name: "khan",
city : "Meerut",
country : "country"
});
});
});
Như đã nói trong các câu trả lời khác, không có cách nào để thực hiện yêu cầu ĐĂNG bằng window.location.href, để làm điều đó, bạn có thể tạo một biểu mẫu và gửi nó ngay lập tức.
Bạn có thể sử dụng chức năng này:
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'});
Câu trả lời ngắn gọn: không. window.location.href
không có khả năng chuyển dữ liệu POST.
Câu trả lời hơi hài lòng hơn: Bạn có thể sử dụng chức năng này để sao chép tất cả dữ liệu biểu mẫu của mình và gửi nó.
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);
cho từng trong ba biểu mẫu bạn muốn gửi. <input name="email">
trong <form name="login">
, tên đã gửi sẽ là login_name
. nameJoiner
biến thành một cái gì đó khác _
để nó không xung đột với sơ đồ đặt tên đầu vào của bạn.submitMe.submit();
nó đơn giản như thế này
$.post({url: "som_page.php",
date: { data1: value1, data2: value2 }
).done(function( data ) {
$( "body" ).html(data);
});
});
Tôi phải giải quyết vấn đề này để tạo khóa màn hình cho ứng dụng của mình, nơi tôi phải chuyển dữ liệu nhạy cảm với tư cách người dùng và url nơi anh ta đang làm việc. Sau đó, tạo một hàm thực thi mã này
done()
bộ chức năngwindow.location.href
Bạn đã xem xét việc sử dụng Local / Session Storage một cách đơn giản chưa? -hoặc- Tùy thuộc vào độ phức tạp của những gì bạn đang xây dựng; bạn thậm chí có thể sử dụng indexDB.
lưu ý :
Local storage
và indexDB
không an toàn - vì vậy bạn muốn tránh lưu trữ bất kỳ dữ liệu nhạy cảm / cá nhân nào (ví dụ như tên, địa chỉ, địa chỉ email, DOB, v.v.) trong một trong hai dữ liệu này.
Session Storage
là một tùy chọn an toàn hơn cho bất kỳ thứ gì nhạy cảm, nó chỉ có thể truy cập vào nguồn gốc đặt các mục và cũng sẽ xóa ngay sau khi trình duyệt / tab được đóng.
IndexDB
phức tạp hơn một chút [nhưng không nhiều] và được tích 30MB noSQL database
hợp vào mọi trình duyệt (nhưng về cơ bản có thể không giới hạn nếu người dùng chọn tham gia) -> lần tới khi bạn sử dụng tài liệu của Google, hãy mở DevTools -> ứng dụng -> IndexDB và có một đỉnh cao. [cảnh báo spoiler: nó được mã hóa].
Tập trung vào Local
và Session Storage
; cả hai đều rất đơn giản để sử dụng:
// 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( );
Nếu đơn giản không phải là điều của bạn - hoặc- có thể bạn muốn đi tắt đón đầu và thử một cách tiếp cận khác cùng nhau -> bạn có thể sử dụng shared web worker
... bạn biết đấy, chỉ dành cho những cú đá.
Bạn có thể sử dụng GET thay vì vượt qua, nhưng không sử dụng phương pháp này cho các giá trị quan trọng,
function passIDto(IDval){
window.location.href = "CustomerBasket.php?oridd=" + IDval ;
}
Trong CustomerBasket.php
<?php
$value = $_GET["oridd"];
echo $value;
?>
window.location.href
thực hiện yêu cầu GET cho URL mới, không phải ĐĂNG.