jquery 读取集合对象多是要与json进行解析操作的,以下自己经过多方资料查找,终于有一套自己的方式组合.
1.首先创建web services或一般处理程序,用于显示获取Datatable对象
product.asmx
[WebMethod]
-- BigClassName 传递的参数
public string Test(string BigClassName)
{
System.Text.StringBuilder strwhere = new System.Text.StringBuilder();
strwhere.Append(" and BigClassName='").Append(BigClassName).Append("'");
System.Data.DataTable dt = new BLL.smallclass_BLL().GetList(strwhere.ToString()); // 从数据获取Datatable对象
return ToJson(dt);
}
----- 这是转换成json格式进行输出显示,因为前台jquery不接受显示DataTable对象;--- 复用性不大
/// <summary>
/// Datatable转换为Json
/// </summary>
/// <param name="table">Datatable对象</param>
/// <returns>Json字符串</returns>
public static string ToJson(DataTable Adt)
{
StringBuilder jsonString = new StringBuilder();
jsonString.Append("[");
foreach (DataRow pdr in Adt.Rows)
{
jsonString.Append("{");
jsonString.AppendFormat("\"name\":\"{0}\",\"value\":\"{1}\"", pdr["SmallClassName"].ToString(), pdr["SmallClassName"].ToString());
jsonString.Append("},");
}
jsonString.Remove(jsonString.Length - 1, 1);
jsonString.Append("]");
return jsonString.ToString();
}
----这是显示前台jquery代码
function GetType3(args) {
var id = "<%=ddltype2.ClientID %>"; // 这是获取ID号,因为我是在用户控件上测试的,
$("#" + id).html("");
$("#" + id).append("<option value='0' selected='selected'>选择小类</option>");
$.ajax({
type: "post",
dataType: "json",
contentType: "application/json;charset=utf-8",
url: "/Ajax/product.asmx/Test",
data: "{BigClassName:'" + args + "'}",
success: function(data) {
// 此处是重点,我就是在这个地方弄了好久,如果你直接使用data赋值,那就会获取不到值会弹出undefined
var obj = eval(data.d);
$.each(obj, function(field) { alert(obj[field].value); });
var json = data.d;
json = eval(json);
for (var i = 0; i < json.length; i++) {
$("#" + id).append("<option value='" + json[i].value + "'>" + json[i].name + "</option>");
}
}
});