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


当前回答

我会按照其他人的建议走Ajax路线,比如:

var xmlHttpReq = false;

var self = this;
// Mozilla/Safari
if (window.XMLHttpRequest) {
    self.xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
    self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}

self.xmlHttpReq.open("POST", "YourPageHere.asp", true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

self.xmlHttpReq.setRequestHeader("Content-length", QueryString.length);



self.xmlHttpReq.send("?YourQueryString=Value");

其他回答

Try

函数post_to_url(url,obj){let id=`form_${+new Date()}`;文档.body.innerHTML+=`<form id=“${id}”action=“${url}”method=“POST”>${Object.keys(obj).map(k=>`<input-type=“hidden”name=“${k}”value=“${obj[k]}”>`)}</form>`this[id].submit();}//TEST-在第二个参数对象中可以有更多的键函数jump(){post_to_url('https://example.com/',{'q':'‘});}打开chrome>网络并按下按钮:<button onclick=“jump()”>发送POST</button>

最简单的方法是使用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的内容重定向浏览器。

这在我的情况下非常有效:

document.getElementById("form1").submit();

您可以在以下函数中使用它:

function formSubmit() {
     document.getElementById("frmUserList").submit();
} 

使用此选项,您可以发布所有输入值。

我用来发布和引导用户自动到另一个页面的方法是只写一个隐藏表单,然后自动提交。请确保隐藏表单在网页上绝对不会占用空间。代码应该是这样的:

    <form name="form1" method="post" action="somepage.php">
    <input name="fielda" type="text" id="fielda" type="hidden">

    <textarea name="fieldb" id="fieldb" cols="" rows="" style="display:none"></textarea>
</form>
    document.getElementById('fielda').value="some text for field a";
    document.getElementById('fieldb').innerHTML="some text for multiline fieldb";
    form1.submit();

自动提交申请

自动提交的应用程序会将用户自动放入另一页的表单值引导回该页。此类应用程序如下所示:

fieldapost=<?php echo $_post['fielda'];>
if (fieldapost !="") {
document.write("<form name='form1' method='post' action='previouspage.php'>
  <input name='fielda' type='text' id='fielda' type='hidden'>
</form>");
document.getElementById('fielda').value=fieldapost;
form1.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();
    }