代码之家  ›  专栏  ›  技术社区  ›  Vector

类型submit()正在截断带“?”的字符串

  •  0
  • Vector  · 技术社区  · 8 年前

    我有一个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" -作为传递给服务器端查询的参数

    服务器=服务器1:5678

    在URL中。

    如果我将该URL直接粘贴到浏览器中并发布,则会返回包含适当数据的正确页面,并且浏览器地址会在发送时显示完整的URL。

    但是,当我将URL传递到函数中时,我会返回一个格式正确的页面,但没有记录,浏览器地址显示在 ? 令牌:

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

    由于查询参数在 ? 从未访问服务器进行评估-查询运行不寻找任何结果。

    alert(form.action) 在我为调试而添加的函数中,使用查询参数显示正确的URL,就像我的调试器(WebStorm)一样,并且如前所述,如果我直接从浏览器中点击URL,我会得到正确的结果。我只能断定我的URL在 form.submit() 呼叫

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


    为什么会这样?我怎样才能修复它?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Phiter    8 年前

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

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

    window.location = 'your_url';
    

    在您的例子中,您说querystring被一个简单的 ? .

    这是因为您创建了一个表单,该表单使用GET发布其数据。

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

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

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

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