<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和数据here。但是,这对我不起作用。
注意:即使我在帖子标题中提到过,我也想澄清一点,我想通过简单的超链接使用POST
方法导航到另一个页面。
答案 0 :(得分:15)
创建一个包含您需要发送的所有数据的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数据,您可能希望将用户重定向到.php页面而不是.html页面。这取决于您的服务器配置,但默认情况下,我认为您不能在.html文件中运行PHP代码。
答案 1 :(得分:7)
我知道这个问题差不多已有4年了,而且已经有了一个公认的答案,但我想提供一个替代解决方案,并指出你的错误。
使用import tkinter as tk
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
super(MainApplication, self).__init__(parent, *args, **kwargs)
if __name__ == '__main__':
root = tk.Tk()
MainApplication(root) # Remove pack(...)
root.mainloop()
请求导航的传统解决方案是一种表单,接受的答案使用该表单。我将在此基础上构建一个使用DOM以编程方式创建表单的解决方案。
POST
我根据您的原始代码使用了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
,但我会接受已接受的答案建议并使用PHP接受并处理index.html
数据。
原始解决方案的主要问题是它使用POST
,这是一个建立在$.post
之上的辅助函数。 AJAX旨在用于从服务器检索数据并在当前页面中使用它,而不是导航到另一个页面。
答案 2 :(得分:2)
这应该工作正常。 类似于一个答案,但是更好。
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();
答案 3 :(得分:0)
最后,我做到了,但并不是我想要的。但它对我有帮助。现在,为他人分享
<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>
答案 4 :(得分:0)
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();
}
答案 5 :(得分:0)
我终于在我的一个项目中使它工作了。
您可以尝试
<html>
<head>
</head>
<body>
<button id="clickme">GO</button>
</body>
<script>
$("#clickme").click(function(e){
var myForm = '<form id="ff" action="page2.php" method="POST">\
<input name="name" value="John">\
<input name="time" value="2pm">\
</form>';
$('body').append(myForm);
$('#ff').submit();
$('#ff').remove();
});
</script>
</html>
<html>
答案 6 :(得分:-1)
你的意思是什么不起作用?将结果发布到简单的.html
页面时,它如何运作?
$.post
函数是$.ajax
的简写,我总是发现它更容易阅读和调试!请再次查看您提供的链接,并查看页面底部的示例!
例如:
$.post("test.php", { name: "John", time: "2pm" } );
更新:不,它不应该转到index.html
。你的代码实际上做的是将post变量发送到.html
页面,所以基本上它没有那么多。也就是说,你可以用许多不同的解决方案做你想做的事情,见下面两个:
您可以在done
功能上添加$.post
事件,例如:
$.post("test.php", { name: "John", time: "2pm" } ).done(function() { alert("Success, do the redirection here!"); });
或者也许使用get变量而不是post变量重定向?例如:
window.location = "index.php?username=blah&pass=blah";
并在php页面中处理它们。
PS。上面的解决方案显然是出于测试目的,如果你这样做,你将以某种方式加密你的数据!