Wicket:并发Ajax请求仅限于一个?

时间:2011-05-02 11:43:14

标签: ajax wicket

场合

在我的Wicket应用程序中,我有一个包含两个标签的页面。每次选择一个选项卡时,都会通过Ajax获取其内容,这样每次切换到另一个选项卡时,它的内容都会从服务器中新加载。

在其中一个选项卡上,我有一个输入字段,其中包含一个onblur事件,该事件通过Ajax保存字段的内容。

问题

如果焦点在输入字段上,我单击页面的空白区域,它会触发Ajax请求并保存数据。

如果不是单击页面的空白区域,而是单击另一个选项卡,则会触发保存输入字段的Ajax请求,但不会触发切换选项卡的Ajax请求。

Wicket中并发Ajax请求的数量是否限制为一个?

3 个答案:

答案 0 :(得分:9)

是的,对页面实例的并发请求仅限于一个。 Wicket Ajax将在客户端通道中对后续的Ajax请求进行排队。有关正在运行的应用程序的详细信息,请参阅wicket Ajax调试器。

这样做是为了使您的应用程序更容易构建:无需解决服务器上的并发问题。页面访问始终是从一个线程完成的:当前活动请求线程。如果我们不这样做,我们将不得不在组件树上进行同步,并使整个编程模型成为yuk。

答案 1 :(得分:4)

问题是我们的AjaxIndicator在每个Ajax请求期间在整个页面上覆盖DIV。当叠加层就位时,“鼠标”(以及因此“点击”)事件到达,因此丢失。通过按住鼠标按钮并在第一个Ajax请求完成并释放DIV后释放它,第二个ajax请求被触发。

现在看起来很明显,因为我们有这样的覆盖的全部原因是为了防止用户在运行Ajax请求时单击。

我认为我的解决方案是在某些非常快速的请求上禁用ajax指示符,例如这些请求没有任何意义(忽略在服务器负载异常高的情况下请求可能需要更长时间)

答案 2 :(得分:0)

可能是onblur ajax请求的响应可能有错误或者您在ajax响应可能有错误后正在执行的进程。

如果可能,您可以粘贴代码片段。