Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过ajax获取json数据_C#_Ajax_Json_Asp.net Ajax - Fatal编程技术网

C# 通过ajax获取json数据

C# 通过ajax获取json数据,c#,ajax,json,asp.net-ajax,C#,Ajax,Json,Asp.net Ajax,希望这是一个相当简单的问题。请原谅我的无知,但我主要是一名PHP/Zend开发人员,因此我在C#和Visual Studio中遇到了一个json/ajax问题。我有什么明显的遗漏吗?任何帮助都将不胜感激。我是否应该查看列表 以下是启动javascript ajax函数时收到的错误: “未知的web方法getwidgets。” 我在C#中有一个数据集,通过JSON转换器方法运行。这可以很好地工作,并以JSON字符串返回我的数据 private widgetsBL widgetsBLObject =

希望这是一个相当简单的问题。请原谅我的无知,但我主要是一名PHP/Zend开发人员,因此我在C#和Visual Studio中遇到了一个json/ajax问题。我有什么明显的遗漏吗?任何帮助都将不胜感激。我是否应该查看
列表

以下是启动javascript ajax函数时收到的错误: “未知的web方法getwidgets。”

我在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;
}
以下是结果:

{"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
    }
});

getwidgets
需要是静态的

[WebMethod]
public static String getwidgets()

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

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

然后在my.aspx(无getwidgets)检索JSON字符串


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

请记住,如果您希望您的方法暴露于JavaScript调用,则需要用Script PraceOdDATAPETE标记您的方法。从而使它看起来像这样:

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

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

对不起,Philipp,您把我弄丢了。我不知道您所说的“将响应的内容类型设置为JSON”是什么意思。我已经有了一个JSON字符串,需要在ajaxNo problem中检索它。我将很快用一些示例代码更新我的答案。当我将其更改为static时,我得到了以下错误:非静态字段、方法或属性“WidgetWebsite”需要对象引用。\u Default.widgetsBLObject“我不知道widgetsBLObject是什么,但是如果你必须使用它,那么它也需要是静态的。
[ScriptMethod]
[WebMethod]
public static String getwidgets()
{
   // Your core here
}