Javascript 当从HTML表单调用javascrpt方法时,不会调用XMLHttpRequest.onreadystatechange
我有一个javascript函数,它应该调用servlet并计算响应。servlet被正确调用并执行其工作,但对于状态4,不会调用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
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()