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 ответ:
Похоже на гонку-место проведения.перезагрузка разрывает страницу вместе с инфраструктурой 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() } }