【问题标题】:AJAX script manager PageMethod not always calledAJAX 脚本管理器 PageMethod 并不总是被调用
【发布时间】:2014-01-09 10:46:05
【问题描述】:

我在我的代码隐藏中有一个对方法的 AJAX 调用。我已经设置了一切,但它似乎不可靠。

java 函数使用 PageMethods。在代码隐藏中调用我的方法。我做了一些测试,大多数时候它都可以工作,但有时由于某种原因它没有调用代码隐藏中的方法。

我不确定为什么它有时不会这样做,并且从失败的时候看不到任何模式。

它是通过单击子窗口中的链接来执行的,但是您可以继续单击相同的链接,它每次都会点击该方法 X 次,然后突然对于其中一个它不会这样做。

父窗口AJAX调用:

function Update(custtype) {
    PageMethods.CustType(custtype)
}

调用函数的子窗口:

<script type="text/javascript">
    function sendval(value) {
        window.parent.onSave();
        window.parent.Update(value);
        window.top.document.getElementById('txtCustomerType').value = value;
        window.parent.location.reload()
        }
    </script>

父窗口中由于某种原因并不总是被调用的方法:

[System.Web.Services.WebMethod]
public static string CustType(string custtype)
{
    HttpContext.Current.Session["CustType"] = "";
    HttpContext.Current.Session["CustType"] = custtype;
    return custtype;
}

【问题讨论】:

    标签: c# javascript ajax webforms code-behind


    【解决方案1】:

    看起来像一场竞赛——location.reload 正在与 MS-Ajax 基础设施一起拆除页面,并且完成速度比 Update 可以完成调用的速度更快。您必须将所有后续代码放入 onSuccess 回调中,否则您将获得比赛。

    function sendval(value) {
       window.parent.onSave();
       window.parent.Update(value, onSuccess, /*onFailure*/);
       function onSuccess(result){
          window.top.document.getElementById('txtCustomerType').value = value;
          window.parent.location.reload()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      相关资源
      最近更新 更多