检测ajax提交

时间:2012-08-28 12:59:11

标签: c# javascript asp.net ajax

我只有在使用ajax提交页面时才需要运行特定的javascript函数。 我尝试了以下内容:

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

但它似乎也在正常的后卫期间运行。我也尝试用Page控件替换UpdatePanel对象但没有任何区别。

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

2 个答案:

答案 0 :(得分: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
 });

有任何疑问,请随时提出

答案 1 :(得分: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;
}