我正在尝试使用Ajax从C#代码检索到aspx
页面的列表。
这是ajax函数:
$.ajax({
type: 'POST',
url: 'admin.aspx/getGenderCount',
contentType: 'application/json',
dataType: 'json',
data: '{}',
success: successRetireveGenders,
failure: function (response) {
alert("Error");
}
});
function successRetireveGenders(dataValues) {
alert(dataValues); // displayed [object object]
// but i actually have 2 rows result
alert(dataValues.data); //alert with "undefined"
alert(dataValues.d); //alert with "undefined"
// i try to put loop from 0 to response.d.length
for (var i = 0; i < dataValues.length; i++) {
alert(dataValues.length); //alert with "undefined"
alert(dataValues.d.length); //alert with "undefined"
}
我总是看到带有消息的警报:
未定义
c#代码:
[System.Web.Services.WebMethod]
public static List<ParticipantGender> getGenderCount()
{
List<ParticipantGender> ListOfParticipantGender = new List<ParticipantGender>();
var conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd = new SqlCommand("getGenderCount", conn);
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
while (rdr.Read())
{
ListOfParticipantGender.Add(
new ParticipantGender
{
cnt = rdr.GetValue(0).ToString(),
gender = rdr.GetValue(1).ToString(),
});
}
return ListOfParticipantGender;
}
ParticipantGender类别:
public class ParticipantGender
{
public string gender;
public string cnt;
public ParticipantGender()
{
//
// TODO: Add constructor logic here
//
}
public ParticipantGender(string gender, string cnt)
{
this.gender = gender;
this.cnt = cnt;
}
}
编辑:
$.ajax({
type: 'POST',
url: 'admin.aspx/getGenderCount',
contentType: 'application/json',
dataType: 'json',
data: '{}',
success: callback,
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});
var callback = function (data, textStatus, xhr) {
alert("hi"); // not alerted
alert(data + "\t" + textStatus); // not alerted
};
编辑: 我进入控制台了:
jsapi:23一个解析器阻止跨站点(即不同的eTLD + 1)脚本, https://www.google.com/uds/?file=visualization&v=1&packages=corechart, 通过document.write调用。该脚本的网络请求可以 由于性能不佳,浏览器在此页面加载或将来的页面加载中被阻止 网络连接。如果在此页面加载中被阻止,它将是 在随后的控制台消息中确认。看到 https://www.chromestatus.com/feature/5718547946799104了解更多 细节。 google.loader.f @ jsapi:23 jsapi:23解析器阻止,交叉 网站(即不同的eTLD + 1)脚本, https://www.google.com/uds/api/visualization/1.0/40ff64b1d9d6b3213524485974f36cc0/format+en,default+en,ui+en,corechart+en.I.js, 通过document.write调用。该脚本的网络请求可以 由于性能不佳,浏览器在此页面加载或将来的页面加载中被阻止 网络连接。如果在此页面加载中被阻止,它将是 在随后的控制台消息中确认。看到 https://www.chromestatus.com/feature/5718547946799104了解更多 细节。 google.loader.f @ jsapi:23 fontawesome-webfont.woff2:1失败 加载资源:服务器响应状态为404(不是 找到)
答案 0 :(得分:0)
您应该将List<ParticipantGender>
序列化为JSON。您可以安装软件包Newtonsoft.Json
,该软件包提供了许多功能。
根据您的情况
using System.Configuration;
using Newtonsoft.Json;
[System.Web.Services.WebMethod]
public static string getGenderCount()
{
var connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
var ListOfParticipantGender = new List<ParticipantGender>();
using(var conn = new SqlConnection(connStr))
{
conn.Open();
using(var cmd = new SqlCommand("getGenderCount", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
using(var rdr = cmd.ExecuteReader())
{
if (rdr.HasRows)
{
while (rdr.Read()) {
ListOfParticipantGender.Add(
new ParticipantGender
{
cnt = rdr.GetValue(0).ToString(),
gender = rdr.GetValue(1).ToString(),
}
);
}
}
}
}
}
var json = JsonConvert.SerializeObject(ListOfParticipantGender);
return json;
}
使用必要的参数定义Callback
函数,并将其分配给$.ajax
成功事件。
此外,$.ajax没有这样的事件failure
,而是使用error
var callback = function(data, textStatus, xhr)
{
alert(data + "\t" + textStatus);
};
将此callback
分配给成功事件
$.ajax({
type: 'POST',
url: 'admin.aspx/getGenderCount',
contentType: 'application/json',
dataType: 'json',
data: {},
success: callback,
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});