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内部,我只希望JS在AJAX请求结束时执行并且由一个触发页面上的特定按钮。在服务器端,我将myLabel.Text设置为某些文本,然后js检查$(myLabel.CliendID)的innerHTML是否为空并触发js。检查innerHTML是我的解决办法,因为我无法弄清楚如何检查AJAX请求的“发送者”。希望现在更有意义。
edit2:我看过一些documentation,结果你可以查看“发件人”控件。
谢谢。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
我建议您不要让每个控件都执行相同的javascript函数。或者,如果它们这样做,则传递一个参数,指示执行它的那个。
然后,您可以在控件执行的js函数中包含您的ajax。
而且,如果我没有正确理解这个问题,也许您可以更详细地解释它或发布一些代码。
答案 2 :(得分:0)
我已经阅读了一些documentation,结果你可以查看“发件人”控件。问题中的JS已更新,以显示正确的方法签名。
This article给出了更好的解释。