【问题标题】:$ajax callback issue with servletservlet 的 $ajax 回调问题
【发布时间】:2014-09-24 21:57:28
【问题描述】:

好的,问题来了……

我将所有“已保存的锻炼”作为文本对象存储在 Google 数据存储中。 当我查看我保存的锻炼时,服务器会以大量 JSON 对象的形式返回所有保存的锻炼。我解析这些并在​​我的 JSP 页面上按名称显示它们。

一切正常。

现在,如果我想再次使用保存的锻炼,我只需从数组中提取锻炼 JSON,并使用 jQuery $ajax 调用 servlet(转发到“showWorkout.jsp”)再次显示锻炼(使用传入的 JSON)。

问题似乎是 $ajax 调用需要回调。这是正确的吗?

如您所见,我正在尝试从将 JSON 传递到的 servlet 转发到“showWorkout.jsp”。回调似乎阻止了这一点。 “showWorkout.jsp”永远不会显示,当前页面也不会改变。

我可以使用回调调用“showWorkout.jsp”并包含 JSON 以显示锻炼吗?我宁愿不要将整个 JSON 作为 URL 中的查询参数。

或者...我可以禁用回调并允许 servlet 转发到 JSP 吗?

谢谢!

【问题讨论】:

  • 如果目标是在浏览器中加载一个全新的页面,则不应使用 AJAK。您应该简单地发布一个将 JSON 设置为隐藏字段值的表单。如果目标是用 servlet 返回的 HTML 片段替换页面的一部分,那么您需要发送 AJAX 请求,并使用回调函数将接收到的 HTML 注入当前页面的元素中。

标签: jquery ajax json jsp


【解决方案1】:

您使用的是 jquery,对吗?所以回调只是你在success : function(data) {...} 中定义的函数。如此担心回调的问题对我来说意味着你正在用老式的方式而不是实际使用 jquery。

如果您试图转发回执行 ajax 调用的 jsp,则根本不会得到 ajax。如果它有效,那将刷新页面,而不是刷新页面是 ajax 的重点。您所做的就是将 ajax 调用视为异步函数调用,并在触发回调时对响应执行一些操作:

例如,在消息框中打印响应:

success : function(data) { alert(data); }

或者,将响应放入一个 div:

success : function(data) { document.getElemenyById('my_div').innerHTML = data; }

如果您确实想让 servlet 转发到不同的页面或返回到同一页面,请使用常规的 html 表单提交。

【讨论】:

  • 所以基本上如果我想转发到另一个 JSP(例如 showWorkout.jsp)我不能使用 jQuery 的 $.ajax 调用,因为回调将我带回到同一页面(我不想)。每个保存的锻炼名称都显示在 HTML 无序列表中,这意味着我必须在每个项目周围放置一个 Form 标签。或者使用 jQuery 动态创建表单。我认为最简单的做法是使用“location.href”并将锻炼ID 传递给servlet,在数据库中查找并将其转发给显示JSP。这导致我不得不再次查看锻炼的 JSON,但这没什么大不了的。
猜你喜欢
  • 2023-03-07
  • 2014-09-20
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 2013-03-07
  • 1970-01-01
  • 2014-12-20
相关资源
最近更新 更多