gpt4 book ai didi

c# - 如何使用 Jquery/Javascript 轮询到 WebMethod

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:47 24 4
gpt4 key购买 nike

谁能告诉我如何使用 Javascript/JQuery 在特定时间间隔内轮询 webMethod?我尝试了 setInterval 和 setTimeOut,但没有一个对我有用。我的应用程序根据用户的请求生成报告。因为生成报告需要 10-15 分钟,所以我不想阻止 UI 线程,所以我在从 javascript 单击按钮时创建了一个 reportID,并使用 _dopostback 调用按钮单击事件并将 reportID 传递给它。 C# 按钮单击事件使用 Delegate/BeginInvoke 调用 generate_report() 函数,现在我想轮询我创建的 WebMethod 以获取报告...这是一个代码片段..

 $("#btn1").click(function () {
var ReportID = generateReportID();
__doPostBack("<%= btnGenerate.UniqueID %>", ReportID);
IntervalID = setInterval(function () { Poll(ReportID); }, 30000);
});

function Poll(id) {
$.ajax({
type: "POST",
url: "Default.aspx/WebMethod",
data: "{'ReportID','" + id + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
// Check if report is ready
// If not poll again after 30 secs
// If report is ready Get the Report and clearInterval
},
failure: function (error) {
}
});
};

[WebMethod]
public static string WebMethod(string ReportID)
{
if (ResultSet.ContainsKey(int.Parse(ReportID)))
{
return "Ready";
}
else
{
return "NotReady";
}
}

因此,在按钮上单击如何在每 30 秒后开始对此 Web 方法进行轮询,直到报告“就绪”,并在准备就绪后清除间隔。 ??

最佳答案

SetInterval 工作正常,PostBack 是罪魁祸首....后续的回发,即点击按钮会终止之前的 setintervals....所以现在我将所有 ReportID 传递给按钮点击功能的代码隐藏,并使用客户端脚本设置 setIntevals

Page.ClientScript.RegisterStartupScript(typeof(Page), "test"+ UniqueID, "setInterval(function () { Poll(ReportID); }, 30000);", true);

除了将 ReportID 发送到代码隐藏函数并使用客户端脚本循环遍历每个 ReportID 并设置间隔外,还可以将 ReportID 保存在 localStorage 中,以便在后续回发中可用。

注意:非常感谢@Krzysztof Safjanowski 的帮助

关于c# - 如何使用 Jquery/Javascript 轮询到 WebMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24273145/

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