发布到不同的域偶尔会失败

时间:2012-11-19 11:36:57

标签: javascript jquery post

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

这是我用于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 dev工具中看到的:

Screenshot of the request failure from the Chrome dev tools

我已经检查过Firefox并且问题似乎没有发生,所以我对实际问题是什么感到茫然。我知道它在其他方面不会成为一个问题,因为它无法在那里达到并在一毫秒内被拒绝。它必须是浏览器中的内容,但我不知道。

请帮帮我们吧,我已经跑出办公桌来敲我的头!

1 个答案:

答案 0 :(得分: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;
});

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

我希望这有助于拯救某人几天的调查,并在此过程中保存一些办公桌!