<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript">
function DoPost(){
$.post("index.html", { name: "John", time: "2pm" } );
}
</script>
</head>
<body>
<a href="javascript:DoPost()">GO</a>
</body>
</html>
私は関数を作成し、その関数を呼び出そうとしました。その関数の中で、URLとデータについて言及しました ここ 。しかし、それは私のために働いていません。
注:投稿のタイトルで触れたが、それも明確にしたい。POST
を使用して別のページに移動したい単純なハイパーリンクによるメソッド。
送信する必要のあるすべてのデータを含むHTMLフォームを作成し、ユーザーに転送する必要があるページをアクションとして指定します。
<form method="post" id="theForm" action="REDIRECT_PAGE.php">
次に、そのフォームにいくつかの非表示フィールドを配置します。
<input type="hidden" name="name" value="John">
<input type="hidden" name="time" value="2pm">
</form>
これをdoRedirect関数の内側にラップすると、POSTデータを正しく送信しながらリダイレクトが機能します。
document.getElementById('theForm').submit()
補足として、POSTデータを読み取る必要がある場合は、ユーザーを.htmlページではなく.phpページにリダイレクトすることをお勧めします。これはサーバーの設定によって異なりますが、デフォルトでは、 .htmlファイル内でPHPコードを実行できないと思います。
この質問はほぼ4年前のものであり、すでに認められた回答がありますが、別の解決策を提供するとともに、間違いを指摘したいと思います。
POST
リクエストで移動するための従来のソリューションは、受け入れられた回答が使用するフォームです。この上に、DOMを使用してプログラムでフォームを作成するソリューションを提示することで構築します。
var payload = {
name: 'John',
time: '2pm'
};
var form = document.createElement('form');
form.style.visibility = 'hidden'; // no user interaction is necessary
form.method = 'POST'; // forms by default use GET query strings
form.action = 'index.html';
for (key in Object.keys(payload)) {
var input = document.createElement('input');
input.name = key;
input.value = payload[key];
form.appendChild(input); // add key/value pair to form
}
document.body.appendChild(form); // forms cannot be submitted outside of body
form.submit(); // send the payload and navigate
私は元のコードに従ってindex.html
を使用しましたが、受け入れられた回答のアドバイスを取り入れて、PHPを使用してPOST
データを受け入れ、処理します。
元のソリューションの主な問題は、$.post
の上に構築されたヘルパー関数である$.ajax
を使用したことです。 AJAXは、別のページに移動するのではなく、サーバーからデータを取得して現在のページ内で使用するときに使用することを目的としています。
これは正常に動作するはずです。 1つの答えに似ていますが、より良い答えです。
var payload = {
name: 'John',
time: '2pm'
};
var form = document.createElement('form');
form.style.visibility = 'hidden';
form.method = 'POST';
form.action = link;
$.each(Object.keys(payload), function(index, key) {
var input = document.createElement('input');
input.name = key;
input.value = payload[key];
form.appendChild(input)
});
document.body.appendChild(form);
form.submit();
最後に、私はそれを行いましたが、私が望んでいたとおりではありませんでした。しかし、それは私にとって役に立ちます。今、他の人と共有する
<html>
<head>
<script type="text/javascript">
function DoPost() {
document.postlink.submit();
}
</script>
</head>
<body>
<a href="javascript:DoPost()">GO</a>
<form action="demo.php" name="postlink" method="post">
<input type="hidden" name="name" value="this is my POST data">
</form>
</body>
</html>
function js_navigate_with_post(js_url, js_post_params)
{
var js_html='';
js_html += "<form id='js_navigate_with_post' method='post' action='"+js_url+"'>\n";
js_html += "<input type='hidden' name='js_navigate_with_post' value='true'>\n";
for (var js_key in js_post_params) {
if (js_post_params.hasOwnProperty(js_key))
{
js_html += "<input type='hidden' name='"+js_key+"' value='"+js_post_params[js_key]+"'>\n";
}
}
js_html += "</form>\n";
jQuery('body').append(js_html);
jQuery('#js_navigate_with_post').submit();
}