2011-06-24 54 views
1

更新日:だから私はそれを理解しました!私がしなければならなかったのは、jQuery.parseJSON();の使用でした。JSON文字列をJSONオブジェクトに変換しました。ここで更新されたコードです:VB.NET JSONオブジェクトの問題

$.ajax({ 
    type: "POST", 
    url: "GetEEs.aspx/GetNextEEs", 
    data: "{recordID:" + lastItem + "}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg, textStatus, jqXHR) { 
    var jObject = jQuery.parseJSON(msg.d); 
    ddl.length = 0; 
    $.each(jObject.d, function() { 
     $.each(this, function (index, item) { 
     addItemToDDL(ddl, item.Display, item.Value); 
     }); 
    }); 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
    alert(xhr.status); 
    alert(thrownError); 
    } 
}); 

[OK]を、私はテーブルを照会し、データセットを返し、そのページがそれを使用することができるようにJSONに変換する機能を書いています。機能は以下の通りです:

<WebMethod()> _ 
    Public Shared Function GetNextEEs(ByVal recordID As Integer) As ArrayList 
     If Not recordID.Equals(0) Then 
      Dim sql As String = "SELECT TOP 500 * FROM cbotest WHERE ID > " & recordID 
      Dim arr As New ArrayList 

      Using dr As SqlDataReader = Mangrove.SqlHelper.ExecuteReader("...") 
       While dr.Read() 
        arr.Add(New ArrayList() From { _ 
        New With { _ 
         Key .Value = dr("code").ToString, _ 
         Key .Display = dr("description").ToString _ 
        } 
        }) 
       End While 
      End Using 

      Return arr 
     Else 
      Throw New ApplicationException("Invalid Record ID") 
     End If 
    End Function 

機能は、.NET 4で素晴らしい作品が、私はだから私はJayrockと呼ばれるJSON.Netオブジェクトを見つけました。ネット2とそれを使用することはできません。私はそれを使用するために私の機能を変更し、すべてが動作します。

<WebMethod()> _ 
Public Shared Function GetNextEEs(ByVal recordID As Integer) As String 
    If Not recordID.Equals(0) Then 
     Dim sql As String = "SELECT TOP 500 * FROM cbotest WHERE ID > " & recordID 
     Dim json As JsonObject = New JsonObject() 
     Dim items As JsonArray = New JsonArray() 

     Using dr As SqlDataReader = Mangrove.SqlHelper.ExecuteReader("...") 
      While dr.Read() 
       Dim item As JsonArray = New JsonArray() 
       Dim itemArr As JsonObject = New JsonObject() 

       itemArr.Add("Value", dr("code").ToString) 
       itemArr.Add("Display", dr("description").ToString) 

       item.Add(itemArr) 
       items.Add(item) 
      End While 
     End Using 

     json.Add("d", items) 

     Using writer As JsonWriter = New EmptyJsonWriter() 
      json.Export(writer) 
      Return json.ToString 
     End Using 
    Else 
     Throw New ApplicationException("Invalid Record ID") 
    End If 
End Function 

唯一の問題は、JSONを返すときにページを解析できないことです。ここで

は、両方の機能からの出力の例です:

最初のバージョン: [object Object],[object Object],[object Object], ...

改訂バージョン: {"d":[[{"Value":"501","Display":"Record Number 501"}],[{"Value":"502","Display":"Record Number 502"}], ...

あなたが見ることができるように、改訂版は、実際の文字列を返します(これには正しいデータが含まれています)、最初のバージョンではJSONオブジェクトが返されました。関数がStringとして返されていることがわかりましたが、私の人生では、改訂されたコードを使用してJSONオブジェクトを返す方法を理解できません。

誰かがこれを行う方法、またはより良い解決策を考えていますか?私は困惑している!また、これは.Net 2(吸う、私は知っている/)であることを覚えておいてください。

ありがとうございました!ここで

EDIT は、私が使用しているクライアント側のコードの一部です:

$.ajax({ 
    type: "POST", 
    url: "GetEEs.aspx/GetNextEEs", 
    data: "{recordID:" + lastItem + "}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg, textStatus, jqXHR) { 
    //alert(msg.d); 
    document.getElementById('lbl').innerHTML = msg.d; 
    ddl.length = 0; 
    $.each(msg.d, function() { 
     $.each(this, function (index, item) { 
     addItemToDDL(ddl, item.Display, item.Value); 
     }); 
    }); 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
    alert(xhr.status); 
    alert(thrownError); 
    } 
}); 

私は最も内側のループのalert(item);内部を持っていました。文字列を手紙で手紙にしていた。

+1

一部のクライアントサイドのコードは表示できますか? –

+0

クライアントコードを追加しましたが、変更したり、変更する必要はありません。それは前に働いていましたが、私が変更したのは 'GetNextEEs'関数だけでした。 –

+0

私は 'WebMethod'が応答に' d'属性を自動的に追加すると思います。しかし、JayrockはJSONに 'd'属性も加えています。だからJayrockは 'WebMethod'でうまくいきません。 –

答えて

0
$.ajax({ 
    type: "POST", 
    url: "GetEEs.aspx/GetNextEEs", 
    data: "{recordID:" + lastItem + "}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg, textStatus, jqXHR) { 
    var jObject = jQuery.parseJSON(msg.d); 
    ddl.length = 0; 
    $.each(jObject.d, function() { 
     $.each(this, function (index, item) { 
     addItemToDDL(ddl, item.Display, item.Value); 
     }); 
    }); 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
    alert(xhr.status); 
    alert(thrownError); 
    } 
});