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 dev ツールに表示されるものです。

Chrome 開発ツールからのリクエスト失敗のスクリーンショット

Firefox でチェックインしたところ、問題は発生していないようで、実際の問題は何なのか途方に暮れています。1ミリ秒でそこに到達して拒否される方法はないため、相手側では問題にならないことを私は知っています。ブラウザに何かあるはずですが、わかりません。

みんな助けてください、私は頭をぶつけるために机を使い果たしています!

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 に答える