题
由于标题声明我的Ajax调用实际上导致表单被提交到其默认操作,为什么?我以前从未遇到过这种情况,我所有其他的ajax调用都没有这样做过。
function newAjax(t,u){ //t = type(post/get), u = url var resource = null; if (window.ActiveXObject) { resource = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { resource = new XMLHttpRequest(); resource.overrideMimeType('text/html'); } resource.open(t,u,false); resource.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); return resource; } function send_newsletter(){ formObj = document.getElementById("news_form"); var inputs = formObj.getElementsByTagName("INPUT"); var parameters = ""; for(i = 0; i < inputs.length; i++){ parameters += inputs[i].name+"="+encodeURI(inputs[i].value); if(i != inputs.length-1){ parameters += "&"; } } var url = "whereitshouldbegoing.com"; var ajax = newAjax("POST",url); ajax.onreadystatechange = ajaxResult; ajax.setRequestHeader("Content-length", parameters.length); ajax.setRequestHeader("Connection", "close"); ajax.send(parameters); }
这一切都可以正常运行.send行,这是导致表单提交的bugger(我也不知道ajax请求是否真的脱落)。
send_newsletter函数从输入类型= <!>“; image <!>”调用;元素与onclick = <!> quot; send_newsletter()<!> quot;
请不要告诉我使用jQuery或其他库,尽我所能,我们不能使用任何外部库,公司指南等等。
解决方案
输入类型<!>“; image <!>”; 与提交按钮的行为相同 。使用锚点或按钮类型输入来触发您的方法。
<input type="button" onclick="send_newsletter()" value="Send" />
<button onlclick="send_newsletter()">... </button>
<a href="#" onclick="send_newsletter(); return false;"><img src="... /></a>
其他提示
您是否使用提交按钮致电send_newsletter
?
onreadystatechange
未调用回调函数'ajaxResult'
,因为您正在对服务器进行同步调用:
resource.open(t,u,false);
如果您想要调用ajaxResult
,请将其更改为:
resource.open(t,u,true);
现在这就是我所看到的。您必须提供更多信息,例如如何调用INPUT
?
编辑 :(以下作者评论)
image
类型<=>是 图形提交按钮。
不隶属于 StackOverflow