我一直在处理这种情况。在我的Struts 2应用程序中,我正在使用AJAX调用将String数组发送到Action类。我想做的是这样的事:page_1.jsp
- > Action A
- > Action B
- > Action C
。但是,实际发生的是page_1.jsp
- > Action A
- > Action B
- > Action C
- > Action C
,即最后一个Action类被调用两次。
page_1.jsp:
<button class="ink-button double-vertical-space all-25 dynamicButton"
id="finish" disabled> Finish </button>
[...]
$('#finish').click(function(event)
{
var fids = $('input:checkbox').filter(':checked').map(function ()
{
return this.id;
}).get();
$.ajax
({
method: "POST",
url: "A.action",
data: { fids : fids },
traditional: true,
success:
function()
{
// I know that the problem is here.
// Currently I have it like this, so it's understandable
// why action C is getting called 2 times,
// I just don't know how to fix it.
window.location = "C.action";
}
});
});
struts.xml中:
<action name="A" class="action.A" method="execute">
<result name="success" type="redirectAction"> B </result>
</action>
<action name="B" class="action.B" method="execute">
<result name="success" type="redirectAction"> C </result>
</action>
<action name="C" class="action.C" method="execute">
<result name="success"> /page_2.jsp </result>
</action>
答案 0 :(得分:1)
你做的很奇怪。如果您想执行某些操作并转到新页面,那么为什么要使用AJAX?我想不要让用户同时工作:
用户运行AJAX调用,然后开始处理其他内容,并在未保存的工作中间... PUFFF!页面更改是因为AJAX响应返回。
这将是奇怪的,超级烦人且明显违反POLA。
顺便说一下,如果你仍然想用AJAX方式出于某些原因我现在无法想象,那么你可以用两种方式来做:如果您想要显示 page_2.jsp ,请返回dispatcher
结果(或stream
或json
,或者 Action.B 中的redirect
或redirectAction
},然后您的window.location = "C.action";
会调用 Action.C 对(非AJAX)方式。
如果您想要(但似乎不是您的情况)只是反映新操作的网址,请使用history.pushState()
或history.replaceState()
代替window.location()
。他们不会触发任何请求,而URL将是新的。