通过ajax获取json数据

时间:2012-03-26 16:28:56

标签: c# ajax json asp.net-ajax

希望这是一个相当容易的问题。原谅我的无知,但我主要是一个PHP / Zend开发人员,所以我在C#和Visual Studio中遇到json / ajax问题。有什么明显的东西我不见了吗?任何帮助将不胜感激。我应该看List<>吗?

这是我在触发javascript ajax函数时收到的错误: &#34;未知的网络方法getwidgets。&#34;

我在C#中有一个数据集,我通过JSON转换器方法运行。这很好用,并以JSON字符串返回我的数据。

private widgetsBL widgetsBLObject = new widgetsBL();

[WebMethod]
public String getwidgets()
{
    DataSet results = new DataSet();
    results = widgetsBLObject.selectTheWidgets();

    string jsresults = MyClassLibrary.JqueryTools.GetJSONString(results.Tables[0]);
    return jsresults;
}

这是jsresults:

{"Table" : [  {"widgetid" : "1","widgetname" : "gizmo1000","widgetdescription" : "very cool widget"},
{"widgetid" : "2","widgetname" : "gizmo2000","widgetdescription" : "decent widget"},
{"widgetid" : "3","widgetname" : "gizmo3000","widgetdescription" : "terrible widget"}     ]}

我的Javascript电话:

$.ajax({
    type: "POST",
    url: "my.aspx/getwidgets",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
       // do stuff with returned data
    }
});

3 个答案:

答案 0 :(得分:1)

getwidgets需要是静态的

[WebMethod]
public static String getwidgets()

答案 1 :(得分:1)

请记住,如果您希望将方法暴露给来自JavaScript的调用,则需要使用ScriptMethodAttribute标记您的方法。因此看起来像这样:

[ScriptMethod]
[WebMethod]
public static String getwidgets()
{
   // Your core here
}

我会返回方法,对象本身,而不是它的序列化版本,因为如果你将它标记为[ScriptMethod],ASP.NET将为你序列化它;所以在客户端你的变量data.d将包含对象本身,而不是一个简单的字符串,以后你必须反序列化,就像你当前的实现一样。

答案 2 :(得分:0)

您正在混合技术:my.aspx用于呈现HTML内容,但它可用于实现REST功能。

在您的情况下,最简单的方法是将您的代码实现为Page_Loaded()方法的一部分。确保首先清除响应(因此响应中没有任何其他标记)。此外,您可能希望将响应的内容类型设置为JSON(而不是默认的html):

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.ClearContent();
        Response.ContentType = "application/json";

        DataSet results = new DataSet();
        results = widgetsBLObject.selectTheWidgets();

        string jsresults = MyClassLibrary.JqueryTools.GetJSONString(results.Tables[0]);
        return jsresults;
    }

然后在my.aspx(没有getwidgets)检索你的JSON字符串。

此外,由于您没有发布任何数据,请考虑在AJAX调用中使用GET而不是POST。