response.data/ response.d显示为“未定义”

时间:2018-11-01 11:38:19

标签: c# asp.net ajax

我正在尝试使用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(不是   找到)

1 个答案:

答案 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);
            }
        });