Javascript 当从HTML表单调用javascrpt方法时,不会调用XMLHttpRequest.onreadystatechange

Javascript 当从HTML表单调用javascrpt方法时,不会调用XMLHttpRequest.onreadystatechange,javascript,html,Javascript,Html,我有一个javascript函数,它应该调用servlet并计算响应。servlet被正确调用并执行其工作,但对于状态4,不会调用onreadystatechange。我的编码是: function changeUser () { var newEmailWidget = document.getElementById("newEmail"); newEmail = newEmailWidget.value; var newPasswordWidget

我有一个javascript函数,它应该调用servlet并计算响应。servlet被正确调用并执行其工作,但对于状态4,不会调用onreadystatechange。我的编码是:

function changeUser () {
    var newEmailWidget = document.getElementById("newEmail");
    newEmail = newEmailWidget.value;
    var newPasswordWidget = document.getElementById("newPassword");
    newPassword = newPasswordWidget.value;

    var xhr;
    if (window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    } else {
        xhr = new ActiceXObject("Microsoft.XMLHTTP");
    }
    
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4 && xhr.status == 200) {
            document.getElementById('message').innerHTML = xhr.responseText;
        }
    }

    url = "myurl";
    var params = "newEmail=" + newEmail + "&newPassword=" + newPassword;
    xhr.open("POST", url, true);
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.send(params);
}
如果我需要该函数,则从HTML表单调用该函数:

<form method="post" accept-charset="ISO-8859-1" onsubmit="changeOfficeUser()">
...
<input type="submit" value="Send" />
</form>

...
出于测试目的,我在另一个JSP页面中插入了对同一functin的调用,该页面的每一行都有一个表和一个按钮。从该页面开始工作:调用javascript方法,调用servlet,当servlet完成时,调用我的javascript函数中的onreadystatechange。该JSP页面的调用代码段是:

<table width="700px" align="center" style="border:1px solid #000000;">
    <tr>
        <td>
            <form method="post" action = "GenerateRegioPoints">
                <tr>
                    <td>some data</td>
                    <td><input type="button" onclick="changeUser()" value="Change" /></td>
                </tr>
            </form> 
        </td>
    </tr>
</table>

一些数据
为什么在第一种情况下不调用onreadystatechange,其中javascript方法是通过表单中的onsubmit调用的?或者如何正确调用javascript函数

谢谢你的帮助。 顺致敬意,
Gerhard

您没有阻止正常表单提交,因此页面正在重新加载,来自原始页面的JS将停止

onsubmit
中使用
return false
,以防止默认操作

<form method="post" accept-charset="ISO-8859-1" onsubmit="changeOfficeUser(); return false;">

我猜您在表单中定义并使用的函数名中有输入错误。 此外,还应防止表单提交的默认行为:

从提交操作传递事件

<form method="post" accept-charset="ISO-8859-1" onsubmit="changeOfficeUser(e)">

函数是
changeUser()
,而不是
changeOfficeUser()
e.preventDefault()