form.submit()截断字符串'?'

时间:2018-01-05 17:28:55

标签: javascript token form-submit truncated

我有一个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中。我还尝试使用?作为“?” - 结果相同。

为什么会这样?我该如何解决?

1 个答案:

答案 0 :(得分:2)

您似乎正在尝试使用新创建的表单来重定向用户的提交。

这不是必需的,因为您只需使用以下内容重定向用户:

window.location = 'your_url';

在你的情况下,你说查询字符串被一个简单的?替换。

那是因为您创建了一个表单,而且此表单使用GET发布其数据。

因此,如果表单操作为https://www.stackoverflow.com,则查询字符串将添加一个跟随键/值对的询问。

假设您有一个包含两个名为a和b的输入的表单,当您提交它们时,查询字符串将如下所示:

https://www.stackoverflow.com?a=zzz&b=zzz

如果您只是将此url放在表单操作中,它将在您提交时用自己的数据替换查询字符串。由于您的表单没有命名输入,因此查询字符串将为空,这就是您在网址后面有空?的原因。