Dessa vez vamos considerar uma chamada com parametros. Lembrando que estou usando o framework mootools para ajudar com JSON e na criação do objeto ajax.

O javascript ficará assim:

function ajax(){
            var pagePath = window.location.pathname; 
            var campo1   = $("campo1").value;
            var campo2   = $("campo2").value;

            var parametros = { 'a':campo1,'b':campo2};

            var opcoes =   
            {   
                 "method":"post",   
                 "data": Json.toString(parametros),   
                 "urlEncoded": "false",
                 "headers": {
                                "Content-Type": "application/json; charset=utf-8"
                            }, 
                 "onComplete": completou   
            };   
            
            var ajaxObj = new Ajax(pagePath + "/testeAjax", opcoes).request(); 
}

function completou(result){
    var obj = Json.evaluate(result);
    alert(obj.d); // .net framework 3.5
    alert(obj);  // qualquer outro .net framework
}
    <form id="form1" runat="server">
    <div>
        <input type="text" id="campo1" />
        <input type="text" id="campo2" />
        <input type="button" onclick="javascript:ajax();"
    </div>
    </form>

Agora no code-behind

        [WebMethod()]
        public static int testeAjax(int a, int b)
        {
            return a+b;
        }