检查哪个控件启动了AJAX请求

3

asp.net 2.0 / jQuery / AJAX

<script type="text/javascript">
//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
}
</script>

我在页面上有几个控件可能会触发AJAX请求,但我只想在点击特定按钮时才触发JS。我该如何检查是哪个控件发起了请求,以便相应地触发JS?
编辑:我已经解决了它,但我仍然想知道是否可以这样做。
澄清:我无法从onclick事件调用JS,因为页面位于UpdatePanel中,我只希望在AJAX请求结束并且由页面上的一个特定按钮触发时执行JS。在服务器端,我将myLabel.Text设置为一些文本,然后JS检查$(myLabel.CliendID)的innerHTML是否不为空并触发JS。检查innerHTML是我的解决方法,因为我无法弄清楚如何检查AJAX请求的“发送者”。希望现在更加清晰明了。
编辑2:我已经阅读了一些文档,结果发现你可以检查“发送者”控件。
谢谢。
3个回答

7

这是我在代码中做的来识别哪个控件初始化了请求的方法。所有的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;
    }

你能在你的代码片段中包含CheckForSessionTimeout()方法吗? - roman m
没问题...我可以这么做。this.SessionTimeoutMinutes是网页中的一个属性。 - RSolberg

0
我建议您不要让每个控件执行相同的 JavaScript 函数,或者如果它们这样做,传递一个指示哪一个执行它的参数。
然后,您可以在控件执行的 js 函数中包含您的 ajax。
而且,如果我没有正确理解问题,也许您可以更详细地解释一下或发布一些代码。

请查看澄清,希望问题现在更加明确了。 - roman m

0

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

这篇文章提供了更好的解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接