我正在尝试将浏览器指向另一个页面。如果我想要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'});

最好的跨浏览器实现是什么?

我需要一个改变浏览器位置的解决方案,就像提交表单一样。这不应该是异步的,也不应该使用XML,因此Ajax不是答案。


当前回答

您可以使用类似jQuery的库及其$.post方法。

其他回答

最简单的方法是使用Ajax Post Request:

$.ajax({
    type: "POST",
    url: 'http://www.myrestserver.com/api',
    data: data,
    success: success,
    dataType: dataType
    });

哪里:

数据是一个对象dataType是服务器期望的数据(xml,json、脚本、文本、html)url是RESt服务器或服务器端接受HTTP-POST的任何函数的地址。

然后在成功处理程序中使用类似window.location的内容重定向浏览器。

您可以使用jQuery的触发器方法提交表单,就像按下按钮一样,

$('form').trigger('submit')

它将在浏览器上提交。

我是这样做的。

function redirectWithPost(url, data){
        var form = document.createElement('form');
        form.method = 'POST';
        form.action = url;

        for(var key in data){
            var input = document.createElement('input');
            input.name = key;
            input.value = data[key];
            input.type = 'hidden';
            form.appendChild(input)
        }
        document.body.appendChild(form);
        form.submit();
    }

一种解决方案是生成表单并提交

function post_to_url(url, params) {
    var form = document.createElement('form');
    form.action = url;
    form.method = 'POST';

    for (var i in params) {
        if (params.hasOwnProperty(i)) {
            var input = document.createElement('input');
            input.type = 'hidden';
            input.name = i;
            input.value = params[i];
            form.appendChild(input);
        }
    }

    form.submit();
}

所以我可以用一个简单的

javascript:post_to_url('http://is.gd/create.php', {'URL': location.href});

不可以。您不能像提交表单一样提交JavaScript发布请求。

您可以拥有HTML格式的表单,然后使用JavaScript提交它。(如本页多次所述)。

您可以自己创建HTML,不需要JavaScript来编写HTML。如果有人这样建议,那就太傻了。

<form id="ninja" action="http://example.com/" method="POST">
    <input id="donaldduck" type="hidden" name="q" value="a">
</form>

您的函数将按照您想要的方式配置表单。

function postToURL(a,b,c){
    document.getElementById("ninja").action     = a;
    document.getElementById("donaldduck").name  = b;
    document.getElementById("donaldduck").value = c;
    document.getElementById("ninja").submit();
}

然后,像这样使用它。

postToURL("http://example.com/","q","a");

但我会省略函数,只做。

document.getElementById('donaldduck').value = "a";
document.getElementById("ninja").submit();

最后,样式决定在ccs文件中。

#ninja { 
    display: none;
}

就我个人而言,我认为表格应该用名字来称呼,但现在这并不重要。