通过ajax获取json数据
本文关键字:数据 json 获取 ajax 通过 | 更新日期: 2023-09-27 18:28:59
希望这是一个相当简单的问题。请原谅我的无知,但我主要是一名PHP/Zond开发人员,所以我在C#和Visual Studio中遇到了json/ajax问题。有什么明显的东西我遗漏了吗?任何帮助都将不胜感激。我应该看List<>
吗?
以下是我在启动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;
}
以下是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()
请记住,如果您希望您的方法暴露于来自JavaScript的调用,则需要使用ScriptMethodAttribute标记您的方法。因此,它看起来像这样:
[ScriptMethod]
[WebMethod]
public static String getwidgets()
{
// Your core here
}
我会返回方法、对象本身,而不是它的序列化版本,因为如果您将其标记为[ScriptMethod],ASP.NET将为您对其进行JSON序列化;因此,在客户端中,变量data.d将包含对象本身,而不是像当前实现中那样,稍后必须反序列化的简单字符串。
您正在混合技术: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中检索JSON字符串(没有getwidgets)。
此外,由于您没有发布任何数据,请考虑在AJAX调用中使用GET而不是POST。