for (var i in data) { var jsonObj = $.parseJSON(data[i]); var optionstring = ""; for (var item in jsonObj) { jsonObj = eval('('+jsonObj.Table+')'); for (i = 0; i < jsonObj.length; i++) { optionstring += "<option value=\"" + jsonObj[i].id + "\" >" + jsonObj[i].name + "</option>";; } // alert(optionstring); } $("#ddl1").html(optionstring); } }, error: function(msg) { alert("出错了!"); } }); }); <div> <select id="ddl1" name="supplier"></select> </div> 后台代码是这样[WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] ///绑定供应商 public static string GetSupplier() { string ReturnValue = string.Empty; string sql = "select deptid, name from network_department where canuse='0'"; //sql语句 C_DataCommon dcCommon=new C_DataCommon(); DataTable dt = dcCommon.GetDataTable(sql); //数据库帮助类 返回databale类型 ReturnValue = DataTableJson(dt); return ReturnValue; } #region dataTable转换成Json格式 /// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string DataTableJson(DataTable dt) { StringBuilder jsonBuilder = new StringBuilder(); //jsonBuilder.Append(""); // jsonBuilder.Append(dt.TableName.ToString()); jsonBuilder.Append("{\""); jsonBuilder.Append(dt.TableName.ToString()); jsonBuilder.Append("\":["); //jsonBuilder.Append("\"["); for (int i = 0; i < dt.Rows.Count; i++) { jsonBuilder.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { jsonBuilder.Append("\""); jsonBuilder.Append(dt.Columns[j].ColumnName); jsonBuilder.Append("\":\""); jsonBuilder.Append(dt.Rows[i][j].ToString()); jsonBuilder.Append("\","); } jsonBuilder.Remove(jsonBuilder.Length - 1, 1); jsonBuilder.Append("},"); } jsonBuilder.Remove(jsonBuilder.Length - 1, 1); //jsonBuilder.Append("]\""); // jsonBuilder.Append("\""); jsonBuilder.Append("]"); jsonBuilder.Append("}"); return jsonBuilder.ToString(); } #endregion 运行的时候老是提示 Invalid JSON 这哪里不对啊
asp.net返回的json对象只有一个属性为d。。你返回json串会被当做字符串放到d属性里面,d属性值是字符串,不是对象。。你最好不要用for(x in object)来遍历,直接 var s=data.d; data=eval('('+s+')');自己用开发工具看到底返回了什么格式的字符串。。因为你使用的是动态的键名称,要么你就写来 jsonBuilder.Append(dt.TableName.ToString()); //==>写死成,和你的js代码一直 jsonBuilder.Append("Table");jsonBuilder.Append(dt.Columns[j].ColumnName);
$.ajax({
type: "post",
url: "test4.aspx/GetSupplier", //后台webservice里的方法名称
dataType: "json",
contentType: "application/json;charset=utf-8",
data: '{}',
traditional: true,
success: function(data) {
for (var i in data) {
var jsonObj = $.parseJSON(data[i]);
var optionstring = "";
for (var item in jsonObj) {
jsonObj = eval('('+jsonObj.Table+')');
for (i = 0; i < jsonObj.length; i++) {
optionstring += "<option value=\"" + jsonObj[i].id + "\" >" + jsonObj[i].name + "</option>";;
}
// alert(optionstring);
}
$("#ddl1").html(optionstring);
}
},
error: function(msg) {
alert("出错了!");
}
});
});
<div>
<select id="ddl1" name="supplier"></select>
</div>
后台代码是这样[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
///绑定供应商
public static string GetSupplier()
{
string ReturnValue = string.Empty;
string sql = "select deptid, name from network_department where canuse='0'"; //sql语句
C_DataCommon dcCommon=new C_DataCommon();
DataTable dt = dcCommon.GetDataTable(sql); //数据库帮助类 返回databale类型
ReturnValue = DataTableJson(dt);
return ReturnValue;
}
#region dataTable转换成Json格式
/// <summary>
/// dataTable转换成Json格式
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DataTableJson(DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder();
//jsonBuilder.Append("");
// jsonBuilder.Append(dt.TableName.ToString());
jsonBuilder.Append("{\"");
jsonBuilder.Append(dt.TableName.ToString());
jsonBuilder.Append("\":[");
//jsonBuilder.Append("\"[");
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("},");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
//jsonBuilder.Append("]\"");
// jsonBuilder.Append("\"");
jsonBuilder.Append("]");
jsonBuilder.Append("}");
return jsonBuilder.ToString();
}
#endregion 运行的时候老是提示 Invalid JSON 这哪里不对啊
var s=data.d;
data=eval('('+s+')');自己用开发工具看到底返回了什么格式的字符串。。因为你使用的是动态的键名称,要么你就写来 jsonBuilder.Append(dt.TableName.ToString());
//==>写死成,和你的js代码一直
jsonBuilder.Append("Table");jsonBuilder.Append(dt.Columns[j].ColumnName);