AJAX script manager PageMethod вызывается не всегда


У меня есть 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;
}
1 2

1 ответ:

Похоже на гонку-место проведения.перезагрузка разрывает страницу вместе с инфраструктурой MS-Ajax и завершает работу быстрее, чем обновление может завершить вызов. Вы должны поместить весь последующий код в обратный вызов 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()
    }
}