我有一个 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”
- 作为
传递到服务器端查询的参数
server=server1:5678
在 URL 中。
如果我将该 URL 直接粘贴到浏览器中并发布,则会返回包含适当数据的正确页面,并且浏览器地址会显示发送时的完整 URL。
但是当我将 URL 传递到函数中时,我返回了格式正确的页面,但没有记录,并且浏览器地址显示在 ?
标记后 chop 的 URL :
http://testServer:3072/aQuerySite.dll/GetErrors?
页面返回显示没有记录,因为 ?
之后的查询参数从未到达服务器进行评估 - 查询运行时什么也不找。
alert(form.action)
会显示带有查询参数的正确 URL,就像我的调试器 (WebStorm) 一样,并且如上所述,如果我点击 URL直接从浏览器,我得到了正确的结果。我只能得出结论,我的 URL 在 form.submit()
调用中被 chop 。
这种情况发生在 IE、FireFox 和 Chrome 中。我还尝试使用 ?
表示“?” - 相同的结果。
为什么会发生这种情况?我该如何修复它?
最佳答案
您似乎正在尝试使用新创建的表单通过其提交来重定向用户。
这不是必需的,因为您可以简单地使用以下命令重定向用户:
window.location = 'your_url';
在您的例子中,您说查询字符串被替换为简单的 ?
。
这是因为您创建了一个表单,并且该表单使用 GET 来发布其数据。
因此,如果表单操作是 https://www.stackoverflow.com
,查询字符串将添加一个询问,后跟键/值对。
假设您有一个包含两个名为 a 和 b 的输入的表单,当您提交它们时,查询字符串将如下所示:
https://www.stackoverflow.com?a=zzz&b=zzz
如果您只是将此网址放入表单操作中,那么当您提交查询字符串时,它会用自己的数据替换查询字符串。由于您的表单没有命名输入,因此查询字符串将为空,这就是为什么网址后面有一个空的 ?
。
关于javascript - form.submit() 用 '?' chop 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48118474/