如何使用Ajax和Asp.net返回对象列表?

时间:2019-01-03 12:11:38

标签: jquery ajax

我正在尝试通过Ajax从服务器端代码返回对象列表。它已成功返回,但我无法提取。

jQuery代码

$.ajax({
            type: "POST",
            contentType: "application/json;charset=utf-8",
            url: "MyWebService.asmx/Execute_SequenceNo",

            data: JSON.stringify({
                "journalEntry": $('#ContentPlaceHolder1_txtJournalEntry').val().trim()
            }),
            dataType: "json",
            success: function (data) {
                alert("Success = " + data.d.length + ', Data 0 =' + data.d[0] + ' ' + data.d[1])
            },
            error: function (result) {


            }
        })

下面的代码从我的Sql Server获取记录

WebService

[WebMethod]
    public SequenceNumber[] Execute_SequenceNo(string journalEntry)
    {
        DataTable dt = new DataTable();
        List<SequenceNumber> details = new List<SequenceNumber>();
        try
        {
            string cs = ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString;

            using (SqlConnection con = new SqlConnection(cs))
            {
                SqlCommand cmd = new SqlCommand("spTest", con);
                cmd.CommandType = CommandType.StoredProcedure;


                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
                foreach (DataRow drow in dt.Rows)
                {


                    sequence.errorMsg = "Valid";
                    details.Add(sequence);
                }
            }
            return details.ToArray();
        }
        catch (Exception ee)
        {
            //return "NotValid error = " + ee.ToString();
            SequenceNumber sequence = new SequenceNumber();
            sequence.errorMsg = "NotValid";
            return details.ToArray();
        }


    }
  

它成功返回,但是我的警报如下所示

输出

Success = 2, Data 0 =[object Object] [object Object]

1 个答案:

答案 0 :(得分:1)

您的代码似乎运行正常。似乎您期望alert()会做更多的事情。它不会序列化对象或显示您可能想要从这些对象获得的任何给定属性。任何不是原始值的东西都会显示为:

[object Object]

最简单的调试方法是不使用alert()。而是使用console.log()。这有一些好处:

  • 它是非阻塞的,因此代码可以在正常的时间继续执行。这样可以减少由于调试和发布方案中的代码行为差异而导致计时错误的可能性。
  • 它序列化复杂类型,因此您可以全面检查对象。
  • 这不是可忽略的对话框,而是正在进行的日志。

打开浏览器的调试工具,然后查看控制台。然后,在代码中(当前使用success的{​​{1}}函数中),只需执行以下操作:

alert()

观察已记录到控制台的内容。对于调试,这将为您提供复杂对象/数组console.log("Success = ", data); 是什么,它的元素是什么等的精确表示。从那里您可以具体观察如何访问该对象/数组中的任何给定值。