我试图为我的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输出进行硬编码时,我不明白为什么输出仍未定义和正确。
答案 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);