0

在将会话转移到与我合作的公司的过程中“发布”到其他站点时,我遇到了问题。他们要求我们通过“发布”请求在查询字符串中使用会话令牌导航到他们的站点(是的,请求中没有正文)。

这是我用于 Post 请求的代码:

navigateByPost = function(path, parameters)
{
    var form = $('<form />');

    form.attr("method", "post");
    form.attr("action", path);

    parameters && $.each(parameters, function (key, value)
    {
        var field = $('<input />');

        field.attr("type", "hidden");
        field.attr("name", key);
        field.attr("value", value);

        form.append(field);
    });

    $(document.body).append(form);
    form.submit();
}

我这样称呼它:

navigateByPost('http://other.site/login/?parameter1=sessiontokenhere');

大多数情况下,这可以正常工作,但有时,在完全随机的时间间隔内,我看到请求被取消,并且导航永远不会发生。这是导航失败时我在 chrome 开发工具中看到的内容:

Chrome 开发工具请求失败的屏幕截图

我已经检查了 Firefox,但问题似乎没有发生,所以我不知道实际问题是什么。我知道这在对方端不会是问题,因为它不可能到达那里并在一毫秒内被拒绝。它一定是浏览器中的东西,但我不知道。

请帮助我,伙计们,我的桌子快用完了!

4

1 回答 1

0

我发现上面显示的代码确实可以正常运行。我发现附有代码的链接实际上是导致问题的原因。

之前,我得到这样的元素:

$(document).on("click", "a.sessiontransfer", function(e) {
    e.PreventDefault();
    doSessionTransfer();
    return false;
});

这样,如果向页面添加了任何其他链接,他们就会使用此功能。我发现这在 100% 的情况下都不起作用,偶尔会产生我在屏幕截图中粘贴的错误。从那以后,我将其更改为以下内容;

$("a.sessiontransfer").off().on("click", function(e) {
    e.PreventDefault();
    doSessionTransfer();
    return false;
});

我还没有在我尝试过的任何设备上出现此故障,但它有一个不幸的副作用,即如果我向页面添加任何链接,我将不得不重新调用此功能以重新挂钩所有元素,确保首先删除现有的点击。

我希望这将有助于节省某人几天的调查时间并在此过程中节省一些办公桌!

于 2012-11-19T15:30:09.150 回答