JQuery AJAX Get возвращает NULL - PullRequest
       6

JQuery AJAX Get возвращает NULL

0 голосов
/ 12 сентября 2018

Я использую эту функцию для заполнения таблицы в Visual Studio 2010. Но функция успеха возвращает ноль. в моем веб-сервисе я использую

Context.Response.Write (js.Serialize (listMsg));

// THIS IS MY JAVA SCRIPT CODE   

    function getAllMessages() {
        $.ajax({
            url: "TestService.asmx/GetAllMessages",
            dataType: "json",
            method: "GET",
            contentType: "application/json",
            success: function (data) {
                var messageTable = $("#messages tbody");
                $(data).each(function (index, msg) {
                    var apnString = "<tr><td>" + msg.ID + "</td><td>" + msg.Email + "</td><td>" + msg.Message + "</td><td>" + msg.TimeStamp + "</td></tr>";
                    messageTable.append(apnString);
                });

            },
            error: function (err) {
                console.log(err);
            }
        });

}

вот мой код webMethod. Веб-сервис возвращает данные JSON.

[System.Web.Script.Services.ScriptService]
    public class TestService : System.Web.Services.WebService
    {
        SQLHelper clSQLHelper = new SQLHelper();

        [WebMethod]
        public void GetAllMessages()
        {
            List<Messages> listMsg = new List<Messages>();
            DataTable dtMsg = clSQLHelper.PGSQLExecuteReader("get_all_messages", new List<NpgsqlParameter>(), "Messages");
            if (dtMsg != null && dtMsg.Rows.Count > 0)
            {

                foreach (DataRow dr in dtMsg.Rows)
                {
                    Messages Msg = new Messages();
                    Msg.ID = Convert.ToInt32(dr["auto_id"]);
                    Msg.Email = dr["email_id"].ToString();
                    Msg.Message = dr["message"].ToString();
                    Msg.TimeStamp = Convert.ToDateTime(dr["created_on"], new CultureInfo("en-IN"));
                    listMsg.Add(Msg);
                }

                JavaScriptSerializer js = new JavaScriptSerializer();
                Context.Response.Write(js.Serialize(listMsg));
            }
        }
    }

введите описание изображения здесь

1 Ответ

0 голосов
/ 12 сентября 2018

Есть две проблемы с кодом, который вы упомянули -

1.В веб-методе вы используете следующую строку, поэтому вы ничего не возвращаете клиентскому вызову в ajax.

Context.Response.Write (js.Serialize (listMsg));

Таким образом, вам нужно изменить определение метода, чтобы он возвращал строку и возвращал ответ, как показано ниже:

[WebMethod(Description = "Description")]
[System.Web.Script.Services.ScriptMethod(UseHttpGet = true, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
        public string GetAllMessages()
        {
            List<Messages> listMsg = new List<Messages>();
            DataTable dtMsg = clSQLHelper.PGSQLExecuteReader("get_all_messages", new List<NpgsqlParameter>(), "Messages");
            if (dtMsg != null && dtMsg.Rows.Count > 0)
            {

                foreach (DataRow dr in dtMsg.Rows)
                {
                    Messages Msg = new Messages();
                    Msg.ID = Convert.ToInt32(dr["auto_id"]);
                    Msg.Email = dr["email_id"].ToString();
                    Msg.Email = dr["message"].ToString();
                    Msg.TimeStamp = Convert.ToDateTime(dr["created_on"], new CultureInfo("en-IN"));
                    listMsg.Add(Msg);
                }

            }
            JavaScriptSerializer js = new JavaScriptSerializer();
            return js.Serialize(listMsg);
        }

2.Вы не сообщаете веб-методу ASMX, как к нему можно получить доступ

Поскольку вы вызываете метод GET в asmx, вам нужно добавить строку ниже в верхней части веб-метода

[System.Web.Script.Services.ScriptMethod (UseHttpGet = true, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]

Важность вышеуказанной строки -

Этот атрибут используется для указания информации для методов, которые могут быть вызваны из клиентского скрипта.Атрибут позволяет указать, какой HTTP-глагол (GET или POST) можно использовать для вызова метода.Он также позволяет указать, форматируется ли ответ с помощью нотации объектов JavaScript (JSON) или XML.

Ниже приведены подробные сведения о других атрибутах -

UseHttpGet

Указывает, будет ли метод вызываться с помощью команды HTTP GET.По умолчанию установлено значение false.

ResponseFormat

Указывает, будет ли ответ сериализован как JSON или как XML.По умолчанию это Json.Свойство ResponseFormat полезно для указания XML в качестве возвращаемого типа, когда метод возвращает объект XmlDocument или XmlElement.

Дополнительные сведения см. В этом https://docs.microsoft.com/en-us/dotnet/api/system.web.script.services.scriptmethodattribute?view=netframework-4.7.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...