解决方案 »

  1.   

    在success的处理函数里加个alert,看看有没有正确返回,也可以用浏览器debug一下,先看看是否正确的进入到success处理函数中,再看看是否拿到返回值。
      

  2.   

    谢谢楼上回复,其实这两个function都是调用同一个web service, 返回的值应该是相同的,不同的是一个直用 $("#output").text(msg.d); 显示出来,另一个是想添加到select 中。当我执行 $("#output").text(msg.d) 后,页面显示的内容是:
     {'':[{'ItemNo':'1a','ItemName':'testaaa'},{'ItemNo':'2b','ItemName':'testbbb'},{'ItemNo':'3c','ItemName':'testccc'}]}最前面的这个 '' 是不是table name? 是因为它所以我的 $(result.d).each(function () 提不出正确的内容吗?
      

  3.   

    $(result.d[""]).each(function () {
                               //$("#SltType1").options.append( this.ItemNo , this.ItemName );
                               $("#SltType1").append("<option value='" + this.ItemNo + "'>" + this.ItemName + "</option>");
                           });
      

  4.   

    我试了这个方法,不管result.d[]  中用两个单引号还是两个双引号,都不行。
    并且我在button1中将 $("#output").text(msg.d) 改成  $("#output").text(msg.d['']) 或者  $("#output").text(msg.d('')) 也无法显示内容在页面上。
      

  5.   

    完整的json 如下: {'':[{'ItemNo':'1a','ItemName':'testaaa'},{'ItemNo':'2b','ItemName':'testbbb'},{'ItemNo':'3c','ItemName':'testccc'}]}
      

  6.   

    $(result[""]).each(function () {
                               //$("#SltType1").options.append( this.ItemNo , this.ItemName );
                               $("#SltType1").append("<option value='" + this.ItemNo + "'>" + this.ItemName + "</option>");
                           });
      

  7.   


    还是不行,会不会是append这一句的原因?
      

  8.   

    因为我在  $("#output").text(msg.d)  中试过,如果  $("#output").text(msg)  页面上显示的是: object  object
    而改成 $("#output").text(msg[“”])  就无显示。
      

  9.   

    如果返回的数据是这样的
     {“d”:{'':[{'ItemNo':'1a','ItemName':'testaaa'},{'ItemNo':'2b','ItemName':'testbbb'},{'ItemNo':'3c','ItemName':'testccc'}]}}
    用 #4 的方法是没问题的
      

  10.   

    我改了一下Web service  现在返回的数据是这样: {'tb':[{'ItemNo':'1a','ItemName':'testaaa'},{'ItemNo':'2b','ItemName':'testbbb'},{'ItemNo':'3c','ItemName':'testccc'}]}但是现在我用下面两句都试过,还是不行。   $(result["tb"]).each(function () {
    或者
       $(result.d["tb"]).each(function () {
      

  11.   


    你的这个d 是dataset的名字吧,因为后面大括号内还有一个 '' ,这个是datatable 的name ?
      

  12.   

    先别急着用each啊,直接用代码取出里面的数据试试,应该能拿出来。
    each里面加个alert看看,看看是否能进来,帮助你判断是否是代码写错了。
      

  13.   

    确实有点心急,不过我用alert 试了一下,当我用以下四句来run 时,提示都是: undifined
                           //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没有办法按字段提取?
      

  14.   

    你给的json不完整啊 f12 network 那边看下输出什么
    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>");
                           });
      

  15.   


        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>");
                      });
      

  16.   


    这段代码可以添加到select中,我仔细对比了一下,只有一些空格和我的输出不一样,难怪是空格不对?
      

  17.   

    我看了一下,不是全半角空格的问题,因为我的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
      

  18.   

    现在是我直接把显示在页面上的结果手动赋值 给变量后,反而可以each 到数据,赋给Select,但是直接each result.d 却不能拿到数据,很奇 怪。这样可以                       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>");
                           });这样不行                       var data = result.d 
                           $(data.tb).each(function () {
                               $("#SltType1").append("<option value='" + this.ItemNo + "'>" + this.ItemName + "</option>");
                           });
      

  19.   

    var data = result.d 
    data=eval('('+data+')')
    $(data.tb).each(function () {
                               $("#SltType1").append("<option value='" + this.ItemNo + "'>" + this.ItemName + "</option>");
                           });试下
      

  20.   


        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返回对不对
      

  21.   

    $([1,2,3]).each(function(){console.log(this)})结果是
     Number {}
    Number {}
    Number {}
    Object[1, 2, 3]
    证明$()里面带纯数组是不能用this的
      

  22.   

    不对,数字被转成类型了,需要this.toString()
      

  23.   


    成功了,非常感谢,看来是我的datatableJson 里要加多一层括号了。
      

  24.   

    还想问一下,虽然我在data外面加了一层小括号后,each 可以获得数据,如果我想将data 最终的内容显示在页面上,要怎么写?
    比如下面的   $("#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);
      

  25.   

      $("#output").text( result.d );
      

  26.   

    result.d 确实可以显示,但是这是加括号前的,加了括号还能显示出来吗?