Не комментируйте свой код
Комментарии не являются кодом, и поэтому, когда все меняется, очень легко не изменить комментарий, который объяснил код. Вместо этого я предпочитаю рефакторировать дерьмо из кода до такой степени, что нет причин для комментариев. Пример:
if(data == null) // First time on the page
to:
bool firstTimeOnPage = data == null;
if(firstTimeOnPage)
Единственный раз, когда я действительно комментирую, это когда это TODO или объяснение почему
Widget.GetData(); // only way to grab data, TODO: extract interface or wrapper
Попробуйте передать данные в виде строки, а не объекта, например:
$.ajax( { ... data : '{ a: 2, b: 3 }', ... } );
Причина в том, что если вы указываете объект как данные, jQuery сериализует данные, используя формат строки запроса, тогда как сервер ожидает формат JSON напрямую.
Это происходит, несмотря на указание jQuery использовать JSON в качестве типа данных - похоже, это связано только с результатом, а не с данными запроса, отправленными на сервер.
Все остальное, что у вас есть, мне кажется правильным.
If you're working with JSON-enabled .NET WebServices/WebMethods... my tips are:
Be very careful with web.config configuration. Use it to enable big parameters, POST method and JSON.
Use a framework to handle Object serialization e deserialization. I would recommend NewtonSoft's Json.NET.
I don't think ASP.NET automagically do it for you, your parameters are always strings. You should take that strings, deserialize it and turn it to an array of objects.