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的 in 语句在完成showMessage()后很长时间才执行。ajaxEditFunctionCall()建议的解决方案是始终在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 回答