检查控制启动的AJAX请求

asp.net 2.0 / jQuery / AJAX

 //updated to show proper method signature var prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_endRequest(hideMessage); function hideMessage(sender, args) { var ctl = args.get_postBackElement(); //check if ctl is the disired control //hide user notification message }  

我在页面上有几个可能启动AJAX请求的控件,但我只想在点击一个特定按钮时触发我的js。 我如何检查启动请求的控件,以便我可以相应地触发JS。

编辑:我解决了这个问题,但我仍然想知道我是否可以这样做。

澄清:我无法从onclick事件中调用JS,因为该页面位于UpdatePanel内部,我只希望JS在AJAX请求结束时执行,并且由页面上的一个特定按钮触发。 在服务器端,我将myLabel.Text设置为某个文本,然后js检查$(myLabel.CliendID)的innerHTML是否为空并触发js。 检查innerHTML是我的解决办法,因为我无法弄清楚如何检查AJAX请求的“发送者”。 希望现在这更有意义。

edit2:我已经阅读了一些文档 ,结果你可以检查“发送者”控件。

谢谢。

这就是我在我的代码中所做的,以确定哪个控件初始化了请求。 所有的JavaScript代码。

 function pageLoad() { if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) { Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initializeRequest); } } function endRequestHandler(sender, args) { if (sender._postBackSettings.sourceElement.id == '<%= gvResults.ClientID %>') { //do something because of this... } } function initializeRequest(sender, args) { if (CheckForSessionTimeout()) { args.set_cancel(true); } else { if (sender._postBackSettings.sourceElement.id == '<%= gvResults.ClientID %>') { //do something because of this } } } 

编辑
以下是在客户端检查超时的方法。

 var sessionTimeoutDateTime = new Date(); var sessionTimeoutInterval = <%= this.SesstionTimeoutMinutes %>; function CheckForSessionTimeout() { var currentDateTime = new Date() var iMiliSeconds = (currentDateTime - sessionTimeoutDateTime); if (iMiliSeconds >= sessionTimeoutInterval) { ShowSessionTimeout(); return true; } return false; } 

我建议你没有每个控件执行相同的JavaScript函数。 或者,如果它们执行,则传递一个参数,指示执行它的是哪一个。

然后,您可以在控件执行的js函数中包含您的ajax。

而且,如果我没有正确理解这个问题,也许您可​​以更详细地解释它或发布一些代码。

我已经阅读了一些文档 ,结果你可以检查“发送者”控件。 更新问题中的JS以显示正确的方法签名。

本文给出了更好的解释。