0

仅当使用 ajax 提交页面时,我才需要运行特定的 javascript 函数。我尝试了以下方法:

ScriptManager.RegisterOnSubmitStatement(Page, Page.GetType(), 
    "scriptName", "MyFunction();");

但它似乎也在正常的回传中运行。我也尝试用控件替换Page对象,UpdatePanel但没有任何区别。

javascript函数内部是否有可能MyFunction()检测它是ajax还是正常提交​​?

4

2 回答 2

1

你可以利用 Sys.WebForm.PageRequestManager 两个事件

1) add_initializeRequest --> 当一个ajax回发被启动时

2) add_endRequest --> 当 ajax 回发完成时。

PageRequestManager 还提供了一个函数“get_isInAsyncPostBack()”,它告诉页面是否仍在进行现有的 ajax 回发。

例子:

Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(function () {

 var prm = Sys.WebForms.PageRequestManager.getInstance();

 // Only one async request at a time
 if (prm.get_isInAsyncPostBack()) {
 prm.abortPostBack();
 }

 //Call the function or process you want to perform on ajax request begin
 });

 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () {
  //Call the fucntion or process you want to perform on ajax request end
 });

有任何问题,欢迎提问

于 2012-08-28T13:15:46.673 回答
0

这段代码解决了这个问题。感谢@user1341446 为我指明了正确的方向。

在提交时注册 javascript 函数:

ScriptManager.RegisterOnSubmitStatement(Page, Page.GetType(), 
    "scriptName", "MyFunction();");

在函数内部检测 ajax 是否提交:

function MyFunction()
{
  var isAjaxSubmit = false;
  if (typeof (Sys) != "undefined")
    isAjaxSubmit = 
       Sys.WebForms.PageRequestManager.getInstance()._postBackSettings.async;
}
于 2012-08-28T14:28:11.890 回答