0

継承した Struts2 + dojo Web アプリケーションに問題があります。アプリケーションは IE9 と Firefox で動作しますが、Chrome では動作しません。

送信ボタンのコードは次のとおりです。

<button dojoType="dijit.form.Button" 
        type="submit" 
        onclick="sendRuleForm('requestSubmitForm', 'resultDiv', 'RequestSubmit.action');">Submit</button>

上記の sendRuleForm 関数の JavaScript コードは次のとおりです。

function sendRuleForm(formId, id, actionNm) {
    var bindArgs = {
        url: actionNm,
        form: document.getElementById(formId),
        handleAs: "text",
        load: function(data) {
            document.getElementById(id).innerHTML = data;            
        },
        error: function(data) {
            alert(data);
            return;
        }
    }
    dojo.xhrPost(bindArgs);
    document.getElementById(id).innerHTML = ajaxLoader;
}

Java コードにブレークポイントを設定すると、アクションが完了 する前にWeb ページがエラーで返されることに気付きました。

Chrome 開発者ツールは、アクション/リクエストのキャンセルのステータスを示します ( Chrome 開発者ツールでリソースの status=canceled とはどういう意味ですか? )

古いバージョンの dojo 1.3.1 を使用していますが、最新バージョンに更新しても問題は解決しませんでした。

誰でもこの動作を説明して、これを修正する方法を教えてもらえますか?

4

1 に答える 1

2

このエラーの ajax / javascript ビットを除外できます。どちらかです

  1. クロムのバグ(ありそうもない)
  2. 呼び出している Struts ページのバグにより、奇妙な HTTP 応答が返される場合があります (サーバー ログを確認してください)。
  3. 複数のリクエストが送信されるフォーム送信に「ジッター」があります。私は推測していますが、おそらくクロムでは異なる方法で処理され<button type="submit"ます<input type="submit"

別のページへのリダイレクトで発生しているのは、おそらく、新しいタブで URL フィールドを手動で更新したときに Struts アプリケーションが GET を受け取るという事実によるものです。ログイン Cookie の欠落などが原因である可能性もあります。

アプリケーションから真の応答を得るには、targetあなたの属性を入力してformから、通常の方法で (XHR を使用せずに) 送信してみてください。

<form action="RequestSubmit.action" method="POST" target="_debugwin">
    <input type="submit" value="DebugSubmit" name="debugbutton" />
     ... remainder of form code

また、dijit ボタンにはオーバーライド可能な関数「onClick」があります。camelCasing に注意してください。DOM onclick イベントを設定しています。この場合、dojo.xhr が起動した直後 (関数が戻ったとき) に、クリック イベントがブラウザーによって処理される可能性があります。この Q: Dojo でフォーム送信を防止するを参照してください。

ただし、これが当てはまる唯一の方法は、フォームが(i)フレームにロードされている場合です。同時に、デバッグウィンドウに「キャンセル」エラーが表示されます。そうしないと、ページ全体が更新され、ネットワーク監視がリセットされます。簡単で有利な回避策として、 onclick 属性を次のように調整します。

<button dojoType="dijit.form.Button" 
        type="submit" 
        onClick="sendRuleForm('requestSubmitForm', 'resultDiv', 'RequestSubmit.action'); /* NOTE */ return false;">Submit</button>
于 2012-10-27T14:16:20.223 に答える