我有一个JavaScript函数:
function post(aAction) {
var form = document.createElement("form");
form.action=aAction;
document.body.appendChild(form);
form.submit();
alert(form.action);
}
(我是一名经验丰富的开发人员,但对JScript没有多少经验 - 从某些网站上解除了post()
功能。)
我将此字符串传递给函数:带有查询信息的URL:
http://testServer:3072/aQuerySite.dll/GetErrors?server=server1:5678
此URL返回一个页面,列出来自指定服务器的错误消息:"server1:5678"
- 传递给服务器端查询的参数为
服务器= server1的:5678
在网址中。
如果我将该网址直接粘贴到浏览器并发布,则返回包含相应数据的正确页面,浏览器地址会显示发送时的完整网址。
但是当我将URL传递给我的函数时,我会返回格式正确的页面,但没有记录,浏览器地址显示在 ?
标记后截断的URL:
http://testServer:3072/aQuerySite.dll/GetErrors?
页面返回显示没有记录,因为 ?
之后的查询参数从不到了服务器进行评估 - 查询运行什么也没找。
alert(form.action)
显示了带有查询参数的正确URL,我的调试器(WebStorm)也是如此,如上所述,如果我直接从浏览器点击URL,我得到了正确的结果。我只能断定我的网址在 form.submit()
电话中被截断了。
这种情况发生在IE,FireFox和Chrome中。我还尝试使用?
作为“?” - 结果相同。
为什么会这样?我该如何解决?
答案 0 :(得分:2)
您似乎正在尝试使用新创建的表单来重定向用户的提交。
这不是必需的,因为您只需使用以下内容重定向用户:
window.location = 'your_url';
在你的情况下,你说查询字符串被一个简单的?
替换。
那是因为您创建了一个表单,而且此表单使用GET发布其数据。
因此,如果表单操作为https://www.stackoverflow.com
,则查询字符串将添加一个跟随键/值对的询问。
假设您有一个包含两个名为a和b的输入的表单,当您提交它们时,查询字符串将如下所示:
https://www.stackoverflow.com?a=zzz&b=zzz
如果您只是将此url放在表单操作中,它将在您提交时用自己的数据替换查询字符串。由于您的表单没有命名输入,因此查询字符串将为空,这就是您在网址后面有空?
的原因。