代码之家  ›  专栏  ›  技术社区  ›  Liam neesan

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

  •  0
  • Liam neesan  · 技术社区  · 7 年前

    我试图通过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获取记录的代码

    [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 回复  |  直到 7 年前
        1
  •  1
  •   David    7 年前

    您的代码似乎工作正常。看起来你只是在期待 alert() 做一些比它更重要的事情。它不会序列化对象或显示您可能希望从这些对象获得的任何给定属性。任何不是基元值的内容都将显示为:

    [object Object]
    

    警报() console.log() . 这有几个好处:

    • 它是非阻塞的,因此代码可以继续以正常的时间执行。这减少了在调试和发布场景中由于代码行为非常不同而导致的计时错误的可能性。
    • 它序列化复杂类型,因此您可以全面检查对象。

    打开浏览器的调试工具并查看控制台。然后在代码中(在 success 当前使用的函数 警报() )只需做如下操作:

    console.log("Success = ", data);
    

    data 是,它的元素是什么,等等。从那里你可以观察如何访问该对象/数组中的任何给定值。