gpt4 book ai didi

c# - 异步发布此数据以及取消/排队新请求的正确方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:21:28 25 4
gpt4 key购买 nike

我正在尝试提高我创建的网络仪表板的稳定性。我注意到进入不良状态的主要原因是用户移动太快并且请求被缩短。

例如,我有以下 javascript:

//When a resize occurs a lot of handling needs to happen to convert the user's action into
//a visibly-pleasing result. In addition, the server has to be spoken with in order to save the controls.
function OnClientResizing(pane, eventArgs) {
eventArgs.set_cancel(true);
var parameters = new Array();
parameters.push("Resize");
parameters.push(pane.get_id());
parameters.push(eventArgs.get_delta());
__doPostBack(pane.get_splitter()._uniqueID, parameters);
}

此函数将辛苦的工作传递回服务器,以便它可以计算在调整大小时调整页面上控件大小的适当方法。这需要 X 秒。如果用户在 X 秒过去之前再次调整页面大小——我进入了一个糟糕的状态。要么旧请求过早中断,要么新请求同时运行。无论哪种方式,页面上的控件都会变得畸形。

因此,我想对 future 的调整大小进行排队,或者尝试取消当前的请求。我读到做这样的事情的最好方法是简单地在这个函数的范围之外设置一个标志。我可以这样做,但我不确定如何检测 doPostBack 的结束。我是否应该在 PageRequestManager - EndRequest 中以某种方式从服务器端更改 javascript 变量?

干杯

最佳答案

首先,不要让您的服务器参与 UI 大小调整算法。完全在客户端做。您可以随时将结果数据发送到服务器,但不要使实时 UI 定位依赖于服务器响应。这应该使用 CSS 或 javascript 逻辑在客户端处理。

其次,如果您的代码无法同时处理两个正在运行的 ajax 调用,那么您的选择如下:

  1. 修复您的代码,使其可以同时处理正在运行的顺序 ajax 响应。
  2. 在发送第二个 ajax 响应时取消/忽略第一个 ajax 响应,这样您就可以忽略第一个响应并等待第二个响应。
  3. 在第一个请求完成之前阻止第二个 ajax 请求。我不建议让他们排队,因为这只会导致更糟糕的用户体验。

如何执行 1、2 或 3 的详细信息取决于您尚未共享的代码的工作方式。

最简单的是选项 3)。这可以只用一个全局标志来完成。只需定义一个全局变量,在开始 ajax 调用时将其设置为 true 并在 ajax 调用完成时将其清除(在完成函数中):

var ajaxInFlight = false;  // global declaration

function OnClientResizing(pane, eventArgs) {
if (ajaxInFlight) return; // do nothing if ajax call already in flight
ajaxInFlight = true;
eventArgs.set_cancel(true);
var parameters = new Array();
parameters.push("Resize");
parameters.push(pane.get_id());
parameters.push(eventArgs.get_delta());
__doPostBack(pane.get_splitter()._uniqueID, parameters);
}

function postBackCompletionHandler(id, parms) {
ajaxInFlight = false; // clear global flag, ajax call done
// ... rest of your function here
}

您还必须确保处理错误情况,以便在 ajax 调用因任何原因失败时重置全局标志。

关于c# - 异步发布此数据以及取消/排队新请求的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7100300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com