在jQuery中获取结果“未定义”

时间:2018-06-20 06:42:36

标签: javascript jquery asp.net ajax

我试图为我的asp.net应用程序使用ajax显示一些值。

这是我的C#代码

[WebMethod]
public static  string   fillvazh(int id)
{
    List<object> Users = new List<object>();
    DataTable dt = new DataTable();
    string query = "select Id,Name, PWD,Email,Mobile from Users where active='Y' and PM_Id='" + id + "'  ";
    dt = GetData(query); //Common function for getting data from db using DataAdapter  
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        Users.Add(new
        {
            Id = dt.Rows[i]["Id"],
            Name = dt.Rows[i]["Name"],
            PWD = dt.Rows[i]["PWD"],
            Email = dt.Rows[i]["Email"],
            Mobile = dt.Rows[i]["Mobile"],
        }); 
    }
    var json = (new JavaScriptSerializer().Serialize(Users));
    return json;
}

我的Jquery是:

<script type="text/javascript"> 
     $(document).ready( function ( e ) {
       $("[id*=pmid]").click(function () {
         vl = $(this).data("val");
         $.ajax({
           type: "POST",
           url: 'Default.aspx/fillvazh',
           data: '{id:'+ vl +'}',
           contentType: "application/json; charset=utf-8",
           dataType: "json",
           success: function (result) {
                      var data = result.d;
                      // var data = [{"Id":1,"Name":"Sam","PWD":iu875t,"Email":samjohn@domain.com,"mobile":"XXXXXXXX"},{"Id":2,"Name":"Titus","PWD":mghjgh76,"Email":titus@domain.com,"mobile":"XXXXXXXX"}]; //Working correctly.
                      var tr;
                      for (var i = 0; i < data.length; i++) {
                        tr = $('<tr/>');
                        tr.append("<td>" + data[i].Id + "</td>");
                        tr.append("<td>" + data[i].Name + "</td>");
                        tr.append("<td>" + data[i].PWD+ "</td>");
                        $('#gvCustomers').append(tr);
                      }           
                   },
                   failure: function (response) {  },
                   error: function (response) { }
             });
        });
    });
</script>

console.log(data)的输出为

[{"Id":1,"Name":"Sam","PWD":iu875t,"Email":samjohn@domain.com,"mobile":"XXXXXXXX"},{"Id":2,"Name":"Titus","PWD":mghjgh76,"Email":titus@domain.com,"mobile":"XXXXXXXX"}]

输出为未定义 但是,当我尝试对控制台数据进行硬编码时,输出将正常显示,这意味着如果我直接使用 result.d 值。

var data = [{"Id":1,"Name":"Sam","PWD":iu875t,"Email":samjohn@domain.com,"mobile":"XXXXXXXX"},{"Id":2,"Name":"Titus","PWD":mghjgh76,"Email":titus@domain.com,"mobile":"XXXXXXXX"}];

当对json输出进行硬编码时,我不明白为什么输出仍未定义和正确。

2 个答案:

答案 0 :(得分:0)

您确定console.log(data)的输出是这个吗?

[{"Id":1,"Name":"Sam","PWD":iu875t,"Email":samjohn@domain.com,"mobile":"XXXXXXXX"},{"Id":2,"Name":"Titus","PWD":mghjgh76,"Email":titus@domain.com,"mobile":"XXXXXXXX"}]

如果是这样,也许问题出在属性 PWD Email

"PWD":mghjgh76,"Email":titus@domain.com

正确的格式应为:

"PWD":"mghjgh76","Email":"titus@domain.com"

然后,解决方案是,在C#代码中,当向 Users 添加新的 object 时,请确保这些属性是字符串

PWD = dt.Rows[i]["PWD"].ToString(),
Email = dt.Rows[i]["Email"].ToString(),

我在上传的图片中看到, result.d 当前为字符串格式,因此应使用$ .parseJSON

var users = $.parseJSON(result.d);

(PWD和电子邮件应为字符串格式,就像我上面所说的那样才能使parseJSON正常工作)

答案 1 :(得分:-1)

尝试以下代码。

 var data = $.parseJSON(result);