无法停止执行单击取消按钮

时间:2013-06-17 07:12:33

标签: javascript ajax jsp struts2

我在struts2中使用ajax处理页面。当我点击确认框的取消按钮时,我无法停止执行。

我在javascript中添加了return语句以及jsp。

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>

1 个答案:

答案 0 :(得分:1)

return中的showMessage()语句在ajaxEditFunctionCall()完成后很久就会执行,因为ajax是异步的。建议的解决方案是始终在onclick中返回false。在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();
            }
        }
    }
}