我正在尝试将浏览器定向到其他页面。如果我想要一个 GET 请求,我可能会说
document.location.href = 'http://example.com/q=a';
但是我试图访问的资源不会正常响应,除非我使用 POST 请求。如果这不是动态生成的,我可能会使用 HTML
<form action="http://example.com/" method="POST">
<input type="hidden" name="q" value="a">
</form>
然后我只需从 DOM 提交表单。
但实际上我想要允许我说的 JavaScript 代码
post_to_url('http://example.com/', {'q':'a'});
什么是最好的跨浏览器实现?
编辑
对不起,我不清楚。我需要一个改变浏览器位置的解决方案,就像提交表单一样。如果使用XMLHttpRequest可以实现这一点,那就不明显了。这不应该是异步的,也不应该使用 XML,所以 Ajax 不是答案。
/**
* sends a request to the specified url from a form. this will change the window location.
* @param {string} path the path to send the post request to
* @param {object} params the paramiters to add to the url
* @param {string} [method=post] the method to use on the form
*/
function post(path, params, method) {
method = method || "post"; // Set method to post by default if not specified.
// The rest of this code assumes you are not using a library.
// It can be made less wordy if you use one.
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();
}
例:
post('/contact/', {name: 'Johnny Bravo'});
编辑 :由于这已经投入了很多,我猜测人们将会复制粘贴这么多。所以我添加了hasOwnProperty
检查以修复任何无意的错误。
这将是使用jQuery的所选答案的一个版本。
// Post to the provided URL with the specified parameters.
function post(path, parameters) {
var form = $('<form></form>');
form.attr("method", "post");
form.attr("action", path);
$.each(parameters, function(key, value) {
var field = $('<input></input>');
field.attr("type", "hidden");
field.attr("name", key);
field.attr("value", value);
form.append(field);
});
// The form needs to be a part of the document in
// order for us to be able to submit it.
$(document.body).append(form);
form.submit();
}