Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wicket:并发Ajax请求仅限于一个?_Ajax_Wicket - Fatal编程技术网

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

Wicket:并发Ajax请求仅限于一个?,ajax,wicket,Ajax,Wicket,形势 在我的Wicket应用程序中,我有一个包含两个标记的页面。每次选择一个选项卡时,它的内容都会通过Ajax获取,因此每次切换到不同的选项卡时,它都会从服务器上新加载内容 在其中一个选项卡上,我有一个输入字段,它有一个onblur事件,通过Ajax保存字段的内容 问题 如果焦点在输入字段上,我单击页面的空白区域,它将触发Ajax请求并保存数据 如果我没有单击页面的空白区域,而是单击了另一个选项卡,则会触发保存输入字段的Ajax请求,但不会触发切换选项卡的Ajax请求 Wicket中并发Ajax

形势

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

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

问题

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

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


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

可能是onblur Ajax请求的响应有错误,或者您在Ajax响应后执行的过程有错误


如果可能,可以粘贴代码sniplet。

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


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

问题在于我们的AjaxIndicator在每个Ajax请求期间在整个页面上覆盖一个DIV。“mouseup”(以及随后的“click”)事件在覆盖就位时到达,因此丢失。在第一个Ajax请求完成并移除覆盖DIV后,按住鼠标按钮并释放它,第二个Ajax请求被触发

现在看来很明显,我们之所以有这样的覆盖是为了防止用户在Ajax请求运行时单击


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

感谢您的回复-单独执行的请求都不会产生错误。我目前正在阅读wicket-ajax.js,那里似乎出现了某种排队现象……谢谢——这是有道理的,但这并不能解释为什么没有触发更改选项卡的请求。队列大小是否限制为1?我检查了频道名称,两者都使用“0 | s”。顺便说一句,虽然在框架级别上这样做会非常痛苦,但在某些有限的情况下,您可以滚动您自己的自更新组件,这些组件可以并行运行,而无需太多麻烦。