var data = {'tb':[{'ItemNo':'1a','ItemName':'testaaa'},{'ItemNo':'2b','ItemName':'testbbb'},{'ItemNo':'3c','ItemName':'testccc'}]} $(data.tb).each(function () { $("#SltType1").append("<option value='" + this.ItemNo+ "'>" + this.ItemName + "</option>"); });
这段代码可以添加到select中,我仔细对比了一下,只有一些空格和我的输出不一样,难怪是空格不对?
我看了一下,不是全半角空格的问题,因为我的web service 中调用的datatableJson 方法,里面没有手动输入过空格 <WebMethod> Public Function getSource() As String Dim dt As DataTable = New DataTable("tb") Dim col1 As DataColumn = New DataColumn("ItemNo", GetType(System.String)) Dim col2 As DataColumn = New DataColumn("ItemName", GetType(System.String)) dt.Columns.Add(col1) dt.Columns.Add(col2) 'Dim dr As DataRow = dt.NewRow dt.Rows.Add("1a", "testaaa") dt.Rows.Add("2b", "testbbb") dt.Rows.Add("3c", "testccc") Return DataTableJson(dt) 'Return dt.ToString End Function ' dataTable转换成Json格式 Public Function DataTableJson(dt As DataTable) As String Dim jsonBuilder = New StringBuilder() jsonBuilder.Append("{'") jsonBuilder.Append(dt.TableName.ToString) jsonBuilder.Append("':[") For i As Integer = 0 To dt.Rows.Count - 1 jsonBuilder.Append("{") For j As Integer = 0 To dt.Columns.Count - 1 jsonBuilder.Append("'") jsonBuilder.Append(dt.Columns(j).ColumnName) jsonBuilder.Append("':'") jsonBuilder.Append(dt.Rows(i)(j).ToString) jsonBuilder.Append("',") Next jsonBuilder.Remove(jsonBuilder.Length - 1, 1) jsonBuilder.Append("},") Next jsonBuilder.Remove(jsonBuilder.Length - 1, 1) jsonBuilder.Append("]") jsonBuilder.Append("}") Return jsonBuilder.ToString End Function
{'':[{'ItemNo':'1a','ItemName':'testaaa'},{'ItemNo':'2b','ItemName':'testbbb'},{'ItemNo':'3c','ItemName':'testccc'}]}最前面的这个 '' 是不是table name? 是因为它所以我的 $(result.d).each(function () 提不出正确的内容吗?
//$("#SltType1").options.append( this.ItemNo , this.ItemName );
$("#SltType1").append("<option value='" + this.ItemNo + "'>" + this.ItemName + "</option>");
});
并且我在button1中将 $("#output").text(msg.d) 改成 $("#output").text(msg.d['']) 或者 $("#output").text(msg.d('')) 也无法显示内容在页面上。
//$("#SltType1").options.append( this.ItemNo , this.ItemName );
$("#SltType1").append("<option value='" + this.ItemNo + "'>" + this.ItemName + "</option>");
});
还是不行,会不会是append这一句的原因?
而改成 $("#output").text(msg[“”]) 就无显示。
{“d”:{'':[{'ItemNo':'1a','ItemName':'testaaa'},{'ItemNo':'2b','ItemName':'testbbb'},{'ItemNo':'3c','ItemName':'testccc'}]}}
用 #4 的方法是没问题的
或者
$(result.d["tb"]).each(function () {
你的这个d 是dataset的名字吧,因为后面大括号内还有一个 '' ,这个是datatable 的name ?
each里面加个alert看看,看看是否能进来,帮助你判断是否是代码写错了。
//alert(result.d['tb'])
//alert(result.d["tb"])
//alert(result["tb"])
//alert(result['tb'])换成 alert(result.d[0]) 后,显示 {
alert(result.d[1]) 显示 ‘
alert(result.d[2]) 显示 t
alert(result.d[3]) 显示 b没有办法按字段提取?
result.d.tb=eval('('+result.d+')')
$(result.d.tb).each(function () {
//$("#SltType1").options.append( this.ItemNo , this.ItemName );
$("#SltType1").append("<option value='" + this.ItemNo + "'>" + this.ItemName + "</option>");
});
var data = {'tb':[{'ItemNo':'1a','ItemName':'testaaa'},{'ItemNo':'2b','ItemName':'testbbb'},{'ItemNo':'3c','ItemName':'testccc'}]}
$(data.tb).each(function () {
$("#SltType1").append("<option value='" + this.ItemNo+ "'>" + this.ItemName + "</option>");
});
这段代码可以添加到select中,我仔细对比了一下,只有一些空格和我的输出不一样,难怪是空格不对?
<WebMethod>
Public Function getSource() As String
Dim dt As DataTable = New DataTable("tb")
Dim col1 As DataColumn = New DataColumn("ItemNo", GetType(System.String))
Dim col2 As DataColumn = New DataColumn("ItemName", GetType(System.String))
dt.Columns.Add(col1)
dt.Columns.Add(col2) 'Dim dr As DataRow = dt.NewRow
dt.Rows.Add("1a", "testaaa")
dt.Rows.Add("2b", "testbbb")
dt.Rows.Add("3c", "testccc")
Return DataTableJson(dt)
'Return dt.ToString
End Function ' dataTable转换成Json格式
Public Function DataTableJson(dt As DataTable) As String
Dim jsonBuilder = New StringBuilder()
jsonBuilder.Append("{'")
jsonBuilder.Append(dt.TableName.ToString)
jsonBuilder.Append("':[")
For i As Integer = 0 To dt.Rows.Count - 1
jsonBuilder.Append("{")
For j As Integer = 0 To dt.Columns.Count - 1
jsonBuilder.Append("'")
jsonBuilder.Append(dt.Columns(j).ColumnName)
jsonBuilder.Append("':'")
jsonBuilder.Append(dt.Rows(i)(j).ToString)
jsonBuilder.Append("',") Next
jsonBuilder.Remove(jsonBuilder.Length - 1, 1)
jsonBuilder.Append("},")
Next
jsonBuilder.Remove(jsonBuilder.Length - 1, 1)
jsonBuilder.Append("]")
jsonBuilder.Append("}")
Return jsonBuilder.ToString
End Function
$(data.tb).each(function () {
$("#SltType1").append("<option value='" + this.ItemNo + "'>" + this.ItemName + "</option>");
});这样不行 var data = result.d
$(data.tb).each(function () {
$("#SltType1").append("<option value='" + this.ItemNo + "'>" + this.ItemName + "</option>");
});
data=eval('('+data+')')
$(data.tb).each(function () {
$("#SltType1").append("<option value='" + this.ItemNo + "'>" + this.ItemName + "</option>");
});试下
var result = {'d':{'tb':[{'ItemNo':'1a','ItemName':'testaaa'},{'ItemNo':'2b','ItemName':'testbbb'},{'ItemNo':'3c','ItemName':'testccc'}]}};
var data = result.d;
$(data.tb).each(function () {
$("#SltType1").append("<option value='" + this.ItemNo+ "'>" + this.ItemName + "</option>");
});看看你的json返回对不对
Number {}
Number {}
Number {}
Object[1, 2, 3]
证明$()里面带纯数组是不能用this的
成功了,非常感谢,看来是我的datatableJson 里要加多一层括号了。
比如下面的 $("#output").text(data.tb); 或者 $("#output").text(data); 或者 $("#output").text(data.d); 都不行,显示的是object var data = result.d
data = eval('(' + data + ')')
$(data.tb).each(function () {
$("#SltType1").append("<option value='" + this.ItemNo + "'>" + this.ItemName + "</option>");
});
$("#output").text(data.tb);