jQuery、JSON、およびASP.NET PageMethods

コードビハインドWebメソッドを使用するためのjQueryの使用に関する素晴らしい記事を発見しました。私は私のウェブサイトにそれを適用しようとしています。しかし、私は、paramの名前が同じであることを保証していますが、私は次のエラーを取得し続けます。

        $(".StreamLike").live("mouseover", function() {
            var Id = $(this).parent().parent().find(".StreamIndex").html();
            alert(Id);
            $.ajax({
                type: 'POST',
                url: 'Default.aspx/GetLikes',
                data: { "Id": Id },
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: LikesSuccess,
                error: LikesError
            });
        }); 

        function LikesSuccess(result, userContext, methodName) {
            for (var i in result) {
                alert(result[i]); 
            }

WebMethod:

[WebMethod]
public static string[] GetLikes(int Id)
{
    List Likes = Like.GetById(Id, false);
    string[] Senders = new string[Likes.Count];
    for (int i = 0; i < Likes.Count; i++)
    {
        Senders[i] = Likes[i].Sender;            
    }
    return Senders;
}

完全なエラーメッセージは次のとおりです。

{"メッセージ": "無効なJSONプリミティブ:Id"、 "StackTrace": "at"   System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\ r \ n   〜で   System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32   深さ)\ r \ nで   System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String   入力、Int32 depthLimit、JavaScriptSerializerシリアライザ)\ r \ n at   System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer   シリアライザ、文字列入力、タイプタイプ、Int32 depthLimit)\ r \ n at   System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T](String   入力)\ r \ nで   System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext   コンテキスト、JavaScriptSerializerシリアライザ)\ r \ n at   System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData   methodData、HttpContextコンテキスト)\ r \ n at   System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext   コンテキスト、WebServiceMethodData   methodData) "、" ExceptionType ":" System.ArgumentException "}

それは常にLikesErrorを打つことです...

0
追加された
ビュー: 1

2 答え

これを試して...

データ:JSON.stringify({"Id":Id})

ポストはあなたの "Id"オブジェクトを名前と値のペアにしています。例えばId = 12345。最初にオブジェクトをストリング化する必要があります。

9
追加された
あなたは私の日を救う!ありがとうございました!
追加された 著者 myoungjin,

chromeの開発ツールを使用して応答値を確認することができます

0
追加された