response.data/ response.d отображается «неопределено» - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь получить список из кода C # на странице aspx, используя ajax.

это функция 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"
}

Я всегда вижу предупреждение с сообщением:

1010 * не определено *

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;
    }

УчастникГендерный класс:

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;

    }
}

EDIT:

$.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
        };

EDIT: я попал в консоль:

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 (не Found)

1 Ответ

0 голосов
/ 01 ноября 2018

Вы должны сериализовать 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.

Также нет такого события failure для $. Ajax вместо этого используйте 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);
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...