Общение

         

Асинхронный вызов


Можно вызывать удаленные методы асинхронно - клиентский скрипт продолжает работать пока серверный метод исполняется и следовательно страница остается доступной для пользователя.

Вызов серверного метода асинхронно схож с синхронным вызовом, за исключением появления дополнительных параметров при вызове:

  • Ссылка на callback функцию в клиентском скрипте, которая вызывается при успешном завершении работы серверного метода.
  • Ссылка на error callback функцию, которая вызывается при возникновении ошибки
  • Необязательные контекстные параметры. Эти данные просто вернутся обратно по окончании работы серверного метода.

    Как и при синхронном вызове, асинхронный вызов создает объект call, содержащий результат работы серверного метода и дополнительную статусную информацию.

  • При асинхронном вызове объект call передается в callback функцию в качестве параметра. Следовательно, вы можете проверить статус вызова и получить результат работы метода.

    Так как при асинхронном вызове необходимо передать ссылку на callback функцию, то используется только JavaScript.

    Для вызова серверного метода асинхронно:

  • Если вы создали page объект, то используется следующая форма вызова.

    callObject = ASPObject.methodName(p1, p2[,...], callbackFunction, errorCallbackFunction, context);

  • В противном случае используется RSExecute() функция:

    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:

  • -1 - произошла ошибка
  • 0 - работа завершена
  • 1 - в процессе (только для асинхронного вызова)

    Асинхронный вызов можно прервать, для этого используется cancel() метод объекта call.


    Содержание раздела