【问题标题】:form.submit() truncating string with '?'form.submit() 用 '?' 截断字符串
【发布时间】:2018-01-05 17:28:55
【问题描述】:

我有一个 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:
http://testServer:3072/aQuerySite.dll/GetErrors?

页面返回显示没有记录,因为 ? 之后的查询参数从未到达服务器进行评估 - 查询运行看起来什么都没有。

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

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


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

【问题讨论】:

  • 当你提交表单时,它会将queryString(后面的数据?)替换为自己的数据。
  • 如果您只是想打开这个 url,您不必将其附加到表单并提交表单。只需location = 'url'
  • @Phiter : 它将用自己的数据替换 queryString(之后的数据?) - 为什么?是个 '?'在这种情况下解释为指形式本身?
  • 我会更新我的答案。

标签: javascript token form-submit truncated


【解决方案1】:

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

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

window.location = 'your_url';

在您的情况下,您说查询字符串被替换为简单的?

那是因为你创建了一个表单,而这个表单使用 GET 来发布它的数据。

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

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

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

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

【讨论】:

  • 问题中的注意事项:alert(form.action) 在我添加用于调试的函数中显示正确的 URL - 包括“?”之后的数据- 你的解释是否涵盖了这一点?好像不是这样...
  • 表单只在你提交时改变url
猜你喜欢
  • 1970-01-01
  • 2014-09-14
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多