由于标题声明我的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类型<=>是 图形提交按钮

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top