【问题标题】:Wicket: concurrent Ajax requests limited to one?Wicket:并发 Ajax 请求限制为一个?
【发布时间】:2011-05-02 11:43:14
【问题描述】:

情况

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

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

问题

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

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

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

【问题讨论】:

    标签: ajax wicket


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢 - 这是有道理的,但它没有解释为什么没有触发更改选项卡的请求。队列大小是否限制为 1?我检查了频道名称,都使用“0|s”。
    • 顺便说一句,虽然在框架级别上做这件事会非常痛苦,但在某些有限的情况下,您可以推出自己的自我更新组件,这些组件并行运行,相对较少大惊小怪。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      如果可能的话,您能否粘贴代码片段。

      【讨论】:

      • 感谢您的回复 - 单独执行的请求都不会产生错误。我目前正在阅读 wicket-ajax.js,那里似乎有某种排队现象......
      猜你喜欢
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多