jQuery.getJSON调用ASP.NET方法

时间:2013-11-25 05:10:33

标签: jquery asp.net json

我有jQuery代码从服务器获取JSON:

 $(document).ready(function () {
            $.getJSON('Default2.aspx/GetPerson', { 'firstname': 'brian', 'lastname': 'lee' }, function (response) {
                alert(response.Age);
            });    
        });

Default2.aspx代码:

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static String GetPerson(String firstname, String lastname)
    {
        Person p = new Person(firstname, lastname);
        return "{\"Age\":\"12\"}";
    }

问题是:

为什么我的脚本没有调用GetPerson方法?我将调试器附加在GetPerson中,但似乎没有调用。

任何帮助都会受到赞赏!

1 个答案:

答案 0 :(得分:5)

默认情况下,

WebMethod会回复POST而不是GET次请求。

$.ajax({
    type: 'POST',
    url: 'Default2.aspx/GetPerson',
    dataType: 'json',
    // ...
});

并且,请求格式也应该是JSON以匹配ResponseFormat

// ...
    data: JSON.stringify({ 'firstname': 'brian', 'lastname': 'lee' }),
    contentType: 'application/json'

或者,可以将ScriptMethod配置为使用GET代替:

[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]

虽然仍然需要为contentType设置,因此无法使用$.getJSON()

$.ajax({
    type: 'GET',
    url: 'Default2.aspx/GetPerson',
    dataType: 'json',
    contentType: 'application/json',
    // ...
});

并且,data将进行URL编码,但在此之前,每个值都需要进行JSON编码:

// ...
    data: {
        firstname: JSON.stringify('brian'),
        lastname: JSON.stringify('lee')
    }

另请注意,ScriptMethod会将其响应包装在{ "d": ... }对象中。而且,由于return值为String,因此"d"的值为同一个未解析的String

// ...
    success: function (response) {
        response = JSON.parse(response.d);
        alert(response.Age);
    }