Javascript 单击链接时,会向服务器发送三个HTTP请求

Javascript 单击链接时,会向服务器发送三个HTTP请求,javascript,forms,request,submit,Javascript,Forms,Request,Submit,有人能建议一下吗,我整个星期都在想这个问题,但还是没有运气 我的问题是web应用程序。当用户单击某个链接时,在单击特定链接(其他链接工作正常)后,IE8浏览器会向服务器发送三个HTTP请求。它假设只发送一个请求 第一个HTTP请求是POST-头和正文数据正确(所有参数看起来都很好) 第二个HTTP请求是POST-标头和正文数据正确(所有参数看起来都很好) 第三个HTTP请求是GET-头中没有引用,正文中没有任何内容(因为它是GET) 第三个请求导致Servlet抛出NULL指针expetion,

有人能建议一下吗,我整个星期都在想这个问题,但还是没有运气

我的问题是web应用程序。当用户单击某个链接时,在单击特定链接(其他链接工作正常)后,IE8浏览器会向服务器发送三个HTTP请求。它假设只发送一个请求

第一个HTTP请求是POST-头和正文数据正确(所有参数看起来都很好)

第二个HTTP请求是POST-标头和正文数据正确(所有参数看起来都很好)

第三个HTTP请求是GET-头中没有引用,正文中没有任何内容(因为它是GET)

第三个请求导致Servlet抛出NULL指针expetion,因为Servlet尝试读取表单参数

所有请求都发送到同一个Servlet。 这三个请求发生在1-2秒内。我确信这不是关于多次点击

用户正在使用IE8和WindowsXP。 这无法在我的环境中复制

我已经在互联网上研究了一周,我注意到IE8的一个已知问题,它将创建对服务器的双重请求,这种情况似乎与Javascript中的“.submit()”有关。我已经非常详细地研究了我的代码,我相信事实并非如此

这里是链接看起来像。请建议

<a href=\"#\" onClick=\"test.goToNextPage();return false;\">Test link</a>


this.goToNextPage = function()
{
// do some paramter manipulation here (such as customer data),
    //not related to this issue
createForm().submit();

}

function createForm()
{

bcForm = document.createElement("form");
bcForm.setAttribute("method", "POST");

//real code add some hidden parameter(e.g. action, Form ID) and value here...

document.body.appendChild(bcForm);

return bcForm;
}

this.goToNextPage=函数()
{
//在此处执行一些参数操作(如客户数据),
//与此问题无关
createForm().submit();
}
函数createForm()
{
bcForm=document.createElement(“表单”);
bcForm.setAttribute(“方法”、“帖子”);
//实数代码在此处添加一些隐藏参数(例如动作、表单ID)和值。。。
文件.正文.附件(bcForm);
返回表格;
}

我也面临同样的问题。这是关于onclick事件在嵌套HTML元素上的传播。例如:如果你有
如果您的

需要使用JS构建表单并使用链接提交?为什么不在标记中使用表单,使用JS填充隐藏字段(如有必要),并使用真正的提交按钮呢?嗨,查菲,感谢您查看并提供答案,这是非常有用的信息,示例非常好。但是,我只是使用Firebug查看页面元素层次结构,不幸的是,在外部HTML元素上没有任何其他“onClick”:(如果您使用按钮标记(不提交)替换A标记,是否会遇到相同的问题?如果是,可能是JS中存在问题。这无法在我的环境中重现:(
function crossbrowser_stopPropagation(e){
    if (!e) {
       e = window.event; 
    }

    e.cancelBubble = true;      

    if (e.stopPropagation) {
       e.stopPropagation(); 
    }       
}
<a href="#" onClick="crossbrowser_stopPropagation(event);test.goToNextPage();return false;">Test link</a>