更新日:だから私はそれを理解しました!私がしなければならなかったのは、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);
内部を持っていました。文字列を手紙で手紙にしていた。
一部のクライアントサイドのコードは表示できますか? –
クライアントコードを追加しましたが、変更したり、変更する必要はありません。それは前に働いていましたが、私が変更したのは 'GetNextEEs'関数だけでした。 –
私は 'WebMethod'が応答に' d'属性を自動的に追加すると思います。しかし、JayrockはJSONに 'd'属性も加えています。だからJayrockは 'WebMethod'でうまくいきません。 –