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

form.submit() truncating string with '?'

我有一个JavaScript函数:

function post(aAction) {
    var form = document.createElement("form");
    form.action=aAction;
    document.body.appendChild(form);
    form.submit();
    alert(form.action);
}

(我是一名经验丰富的开发人员,但对 JScript 的经验不多 - 从某些网站上提升了 post() 功能。)

我将此字符串传递给函数:A URL 以及查询信息:

http://testServer:3072/aQuerySite.dll/GetErrors?server=server1:5678

此 URL returns 页面列出来自指定服务器的错误消息:"server1:5678" - 作为
[=22= 传递给服务器端查询的参数]

server=server1:5678

在URL.

如果我将 URL 直接粘贴到浏览器中并 post 它,将返回具有适当数据的正确页面,并且浏览器地址显示完整的 URL已发送。

但是当我将 URL 传递到我的函数中时,我得到了一个格式正确的页面但没有记录,并且浏览器地址显示 URL 在 [ 之后被截断了=15=] token :

http://testServer:3072/aQuerySite.dll/GetErrors?

页面returns 未显示任何记录,因为 ? 之后的查询参数从未到达服务器进行评估 - 查询运行时没有查找任何内容。

我为调试添加的函数中的

alert(form.action) 显示正确的 URL 和查询参数,我的调试器 (WebStorm) 也是如此,并且如前所述,如果我点击 URL 直接从浏览器,我得到了正确的结果。我只能得出结论,我的 URL 在 form.submit() 调用中被截断了。

这发生在 IE、FireFox 和 Chrome 中。我还尝试使用 ? 作为“?” - 结果相同。


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

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

这不是必需的,因为您可以使用以下命令简单地重定向用户:

window.location = 'your_url';

在你的例子中,你说查询字符串被替换为一个简单的 ?

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

因此,如果表单操作是 https://www.whosebug.com,查询字符串将添加一个询问,后跟 key/value 对。

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

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

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

之后有一个空的 ?