У меня есть проект, который использует PageMethods для вызова функций на сервере.
Серверные функции (написанные на C #) возвращают значения в виде массива строк без какой-либо сериализации, а на стороне клиента (из Js) доступ к возвращаемым значениям осуществляется с помощью статической переменной с именем arguments . ,
Я обнаружил, что иногда для некоторых пользователей (случаи не воспроизводятся) иногда происходит исключение
"WebServiceFailedException серверный метод 'Foo' вернул недопустимые данные.
свойство 'd' отсутствует в JSON. "
При поиске в Google я обнаружил, что люди сериализуют возвращаемые значения с помощью класса DataContractJsonSerializer и в js получают доступ к возвращаемому значению с помощью одной из функций обратного вызова.
Пример:
функция OnRequestComplete (результат,
userContext, methodName) {
var Person = eval ('(' + result + ')');
предупреждение (Person.Forename);
оповещения (Person.Surname); }
Значит, первая техника верна? или что?
P.S:
функция на сервере определяется в файле default.aspx.cs следующим образом:
[System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
public static string[] Foo(string s);
со стороны клиента вызов выглядит следующим образом
PageMethods.Foo("value",OnSuccess);
Также все пользователи имеют одинаковую версию браузера (IE8)