有人能告诉我如何使用Javascript / JQuery在特定时间间隔内对webMethod进行投票吗?我试过setInterval& setTimeOut但不是他们正在为我工作。我的应用程序生成有关用户请求的报告。由于报告生成需要10-15分钟,我不想阻止UI线程,所以我创建一个关于按钮点击javascript并使用_dopostback调用按钮点击事件的reportID并将reportID传递给它。使用Delegate / BeginInvoke C#按钮单击事件调用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方法进行轮询,直到报告为&#34; Ready&#34;并在准备好之后清除间隔。 ??
答案 0 :(得分:2)
SetInterval工作正常,PostBack是罪魁祸首....后续回发即按钮点击会杀死之前的setintervals ....所以现在我将所有ReportID传递给按钮点击功能和使用客户端脚本的setIntevals代码隐藏
Page.ClientScript.RegisterStartupScript(typeof(Page),“test”+ UniqueID,“setInterval(function(){Poll(ReportID);},30000);”,true);
替代方法是将ReportID发送到函数后面的代码并使用客户端脚本循环并设置间隔foreach ReportID,还可以在localStorage中保存ReportID,以便在后续回发中使用它。
注意:感谢您的帮助@Krzysztof Safjanowski
答案 1 :(得分:0)
使用SetTimeout以递归方式调用自身,直到获得所需的结果。
例如:
function initPoll()
{
setTimeout(pollWebServer(), 30000);
}
function pollWebServer()
{
if(!checkResult())
setTimeout(pollWebServer(), 30000);
}
function checkResult()
{
//Do some work to check result that you are looking for
//This is where you would check your Web Method using jQuery
return false;
}