JavaScript提交请求,如表单提交

我正在尝试将浏览器指向其他页面。 如果我想要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不是答案。


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();
}

@Aaron的一个简单的快速和肮脏的实现答案:

document.body.innerHTML += '<form id="dynForm" action="http://example.com/" method="post"><input type="hidden" name="q" value="a"></form>';
document.getElementById("dynForm").submit();

当然,你应该使用一个JavaScript框架,比如Prototype或者jQuery ...

链接地址: http://www.djcxy.com/p/491.html

上一篇: JavaScript post request like a form submit

下一篇: SSL and man