Асинхронный вызов
Можно вызывать удаленные методы асинхронно - клиентский скрипт продолжает работать пока серверный метод исполняется и следовательно страница остается доступной для пользователя.
Вызов серверного метода асинхронно схож с синхронным вызовом, за исключением появления дополнительных параметров при вызове:
Как и при синхронном вызове, асинхронный вызов создает объект call, содержащий результат работы серверного метода и дополнительную статусную информацию.
Так как при асинхронном вызове необходимо передать ссылку на callback функцию, то используется только JavaScript.
Для вызова серверного метода асинхронно:
callObject = ASPObject.methodName(p1, p2[,...], callbackFunction, errorCallbackFunction, context);
callobject = RSExecute(url, methodName, p1, p2[,...], callbackFunction, errorCallbackFunction, context)
Где:
- callobject - имя call объекта;
- ASPObject - объект ссылающийся на ASP страницу;
- url - URL ASP страницы содержащей описание серверных методов. Эта страница должна находится на том же сервере, что и страница осуществляющая вызов;
- methodName - имя метода, который вы хотите исполнить;
- p1, p2 - параметры необходимые для вызова methodName метода. Параметра передаются по значению. В качестве параметров могут быть переданы значения простых типов.
- callbackFunction - ссылка на JavaScript функцию в клиентском скрипте, которая будет вызвана, когда удаленный метод окончит работу.
Т. к. вы передаете ссылку, не включайте имя функции в кавычки. - errorCallbackFunction - ссылка на необязательную JavaScript функцию в клиентском скрипте, которая будет вызвана, если при работе удаленного метода произойдет ошибка. Т. к. вы передаете ссылку, не включайте имя функции в кавычки.
- context - необязательные параметры вызова, эти данные вернутся обратно.
Например, в следующем скрипте асинхронно вызывается серверный метод square. После работы метода вызывается функция showResults(). Имя операции передается как context-параметр.
<script language = "JavaScript" for = "btnSquare" event = "onclick"> rsMath = RSGetASPObject("../myPages/RSMath.asp"); number1 = txt1.value; context = "squaring"; co = rsMath.square(number1,showResults,context); </script>
Аналогичный пример с использованием RSExecute метода:
<script language = "JavaScript" for = "btnSquare" event = "onclick"> number1 = txt1.value; context = "squaring"; co = RSExecute("RSmath.asp","square",number1,showResults,context); </script>
Функция showResults, которая является callback функций в предыдущем примере, может выглядеть следующим образом:
<script language = "JavaScript"> function showResults(co) { typeOp = co.context; rValue = co.return_value; txt2.value = "Result of " + typeOp + "operation = " + rValue; } </script>
В данном случае callback функция служит для вывода результата работы операции. Функция демонстрирует, как вы можете использовать context свойство для определения того, какая операция арифметическая применялась.
Вы можете проверить состояние работы удаленного метода. При асинхронном вызове, можно проверить состояние работы серверного метода. Для этого используется свойства status объекта call Возможные значения свойства status:
Асинхронный вызов можно прервать, для этого используется cancel() метод объекта call.