如何从 Ajax 或 JavaScript 调用 Struts1 Action?
Posted
技术标签:
【中文标题】如何从 Ajax 或 JavaScript 调用 Struts1 Action?【英文标题】:How to call Struts1 Action from Ajax or JavaScript? 【发布时间】:2011-01-18 08:58:02 【问题描述】:我需要在加载 JSP 时调用一个动作。跟踪访问该页面的用户数量。
我有一个操作VisitorCounterAction
,它会更新数据库。
在加载 JSP 时,我正在调用 ajax 函数 callCounter()
;
alert("callCounter");
if (window.XMLHttpRequest)
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
else
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
// i need some correction here
xmlhttp.open("GET",VisitorCounterAction,false);
xmlhttp.send(null);
alert("callCounter returned from Action");
我得到一个例外:
/web/guest/content?p_p_id=31&p_p_lifecycle=0&p_p_state=pop_up&p_p_mode=view&_31_struts_action=%2Fimage_gallery%2Fview_slide_show&_31_folderId=10605 生成异常:null
请帮我解决这个问题。或任何其他方式来调用动作。 我无法重新加载页面,因为它会再次调用 onload 函数。
谢谢, DJ
【问题讨论】:
为什么“p_p_state”的值为“pop_up”? 您是否对您的操作类代码进行了单步调试?你在哪里得到空错误?我正在使用 Struts 1.3 进行一些 AJAX 调用,并且我没有在我的操作类中做任何特别的事情,所以我猜你的问题可能与你发送的参数有关。 【参考方案1】:XMLHttpRequest 对象的open
方法的第二个参数应该是一个字符串,它是请求的URL。在您的情况下,它应该是映射到您的VisitorCounterAction
的 Struts 的动作映射。比如:
xmlhttp.open("GET", "/viewCounterAction.do", false);
【讨论】:
嗨,约翰,我的问题与我的门户有关。我正在使用 Liferay 门户。它仍然给出同样的例外。但我终于可以看到警报消息了。在控制台中可以看到异常。我不想做,它不会采取行动。 你能告诉我应该包含哪个 Jar 以使我的应用程序具有 AJAX,我使用的是 Struts 1.3 版本。我有 struts2-dojo-plugin.jar,它适用于 Struts 1.3 版本吗?【参考方案2】:您需要在调用操作时指定正确的 url。在您的 struts.xml 文件中,您将创建一个带有名称的操作条目。假设名称是 VisitorCounterAction。请注意,这不是 Action 类的名称,而是您在 struts.xml 中使用的名称。
您还可以配置 struts 来识别特定的扩展。默认是 .do。
要请求您将使用的操作:VisitorCounterAction.do。
那就试试吧:
xmlhttp.open("GET","VisitorCounterAction.do",false);
还要注意 URL 周围的双引号,因为这是 xmlHttp 对象的 open() 方法中的字符串。
【讨论】:
嗨,现在例外是(控制台中的记录器信息):20:44:32,153 INFO [STDOUT] 2010-02-18 20:44:32,153 [http-localhost%2F127.0.0. 1-8080-2] 警告 com.liferay.portal.util.PortalImpl - 当前 URL /web/guest/VisitorCounterAction.do 生成异常:null【参考方案3】:如果您使用的是 Liferay 4.2,那么此链接可能会对您有所帮助 (http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Ajax+Toolkit)。 Liferay 4.2 有自己的一套用于执行 AJAX 功能的 javascript API(在 jquery 中实现)。
【讨论】:
以上是关于如何从 Ajax 或 JavaScript 调用 Struts1 Action?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 HTML 或 Javascript 调用 PHP 文件 [关闭]
如何在 ajax 调用中提交表单之前调用 javascript 验证函数
如何在javascript中将数组从php返回到ajax响应
ASP.NET / JavaScript - Ajax 调用,如何?