1

struts2 で ajax を使用してページを処理しています。確認ボックスのキャンセル ボタンをクリックしても実行を停止できません。

javascript と jsp に return ステートメントを追加しました。

var xmlHttp;
        function ajaxEditFunctionCall() {
            var URL = "ProjectName/refreshVoucher.action";
            try {
                xmlHttp = new XMLHttpRequest();
            } catch (e) {
                try {
                    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {
                        alert("Your browser does not support AJAX!");
                        return false;
                    }
                }
            }
            xmlHttp.onreadystatechange = showMessage;

            xmlHttp.open("GET", URL, true);
            xmlHttp.send(null);
        }

    function showMessage() {
        if (xmlHttp.readyState == 4) {
            if (xmlHttp.status == 200) {
                var r = confirm(xmlHttp.responseText);
                if (r) {
                    return true;
                } else {
                    return false;
                }
            }
        }
    }

JSPファイル

<td><s:submit value="Cancel" cssClass="submitBtn" onclick="return ajaxEditFunctionCall();" /></td>

Struts.xml

<action name="refreshVoucher" class="com.action.Action" method="loadAdmin">
            <result name="success">/WEB-INF/jsp/sample.jsp</result>
        </action>
4

1 に答える 1

1

ajaxが非同期であるため、returnステートメントが完了してからshowMessage()ずっと後に実行されます。ajaxEditFunctionCall()推奨される解決策は、常に false を返すことonclickです。ajax コールバックで、応答を確認し、必要に応じて Javascript を使用してフォームを送信します。

function ajaxEditFunctionCall() {
    ...
    ...
    return false;
}

function showMessage() {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            var r = confirm(xmlHttp.responseText);
            if (r) {
                document.forms["my_form_name"].submit();
            }
        }
    }
}
于 2013-06-17T07:23:32.287 に答える