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


当前回答

不可以。您不能像提交表单一样提交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;
}

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

其他回答

您可以使用DHTML动态添加表单,然后提交。

您可以进行AJAX调用(可能使用Prototype.js或JQuery等库)。AJAX可以处理GET和POST选项。

我使用document.forms并循环它以获取表单中的所有元素,然后通过XMLHttpRequest发送。这是我的javascript/ajax提交解决方案(以所有HTML为例):

函数smc(){var http=new XMLHttpRequest();var url=“yourphpfile.php”;var x=document.forms[0];var xstr=“”;变量i;对于(i=0;i<x.length;i++){如果(i==0){xstr+=x.elements[i].name+“=”+x.elements[i].value;}其他{xstr+=“&”+x.elements[i].name+“=”+x.element[i].value;}}http.open(“POST”,url,true);http.setRequestHeader(“内容类型”,“application/x-www-form-urlencoded”);http.onreadystatechange=函数(){如果(http.readyState==4&&http.status==200){//在这里使用html输出响应执行任何操作}}http.send(xstr);}<!DOCTYPE html><html><body><表单>名字:<input-type=“text”name=“fname”value=“Donald”><br>姓氏:<input-type=“text”name=“lname”value=“Duck”><br>地址1:<input-type=“text”name=“add”value=”123 Pond Dr“><br>城市:<input type=“text“name=”City“value=”Duckopolis“><br></form><button onclick=“smc()”>提交</button></body></html>

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>

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

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

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

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

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