2

誰かが提案してもらえますか、私はこれを丸一週間理解しようとしていますが、それでも運がありません。

私の問題はWebアプリケーションです。ユーザーがリンクをクリックすると、特定のリンクをクリックした後(他のリンクは正常に機能しています)、IE8ブラウザーは3つのHTTP要求をサーバーに送信します。リクエストを1つだけ送信することを想定しています。

最初のHTTPリクエストはPOSTです-ヘッダーと本文のデータは正しいです(すべてのパラメーターが適切に見えます)

2番目のHTTPリクエストはPOSTです-ヘッダーと本文のデータは正しいです(すべてのパラメーターが適切に見えます)

3番目のHTTPリクエストはGETです-ヘッダーにリファラーはなく、本文には何もありません(GETであるため)。

3番目の要求により、サーブレットはFORMパラメータを読み取ろうとするため、サーブレットはNULLポインタの例外をスローします。

すべてのリクエストは同じサーブレットに送信されます。3つのリクエストは1〜2秒以内に発生します。これはマルチクリックではないと確信しています。

ユーザーは、WindowsXPでIE8を使用しています。これは私の環境では再現できません。

私は1週間インターネットについて調査しましたが、サーバーへの二重要求を作成するIE8の既知の問題に気づきました。その場合は、Javascriptの「.submit()」に関するもののようです。私は自分のコードを非常に詳細に調べましたが、そうではないと思います。

リンクは次のようになります。提案してください。

<a href=\"#\" onClick=\"test.goToNextPage();return false;\">Test link</a>


this.goToNextPage = function()
{
// do some paramter manipulation here (such as customer data),
    //not related to this issue
createForm().submit();

}

function createForm()
{

bcForm = document.createElement("form");
bcForm.setAttribute("method", "POST");

//real code add some hidden parameter(e.g. action, Form ID) and value here...

document.body.appendChild(bcForm);

return bcForm;
}
4

1 に答える 1

0

私も同じ問題に直面しました。これは、ネストされたHTML要素でのonclickイベントの伝播に関するものでした。例:<td onclick="">内に< aonclick = "">があり、 <a>をクリックするだけの場合、両方のonclickが実行されます。

この現象は「イベントバブリング」と呼ばれ、JavaScriptでこの状況を修正できます。次の関数は、onclickイベントの伝播を停止します。

function crossbrowser_stopPropagation(e){
    if (!e) {
       e = window.event; 
    }

    e.cancelBubble = true;      

    if (e.stopPropagation) {
       e.stopPropagation(); 
    }       
}

次に、次のように、onclicksでこの関数を呼び出す必要があります。

<a href="#" onClick="crossbrowser_stopPropagation(event);test.goToNextPage();return false;">Test link</a> 

<A>タグがonclickイベントを実装する別のHTMLタグ内にある場合は、そのタグでもこの関数を使用することを忘れないでください。

詳細については、次のリンクを確認してください: http: //forums.mozillazine.org/viewtopic.php?f=38&t=549571

于 2012-08-30T22:52:09.003 に答える