2011-10-23 15 views
1

JSON結果をMVC3アクションから取り出し、テーブル行にプッシュしようとしていますが、値はすべて定義されていません。 JQueryのajaxリクエストからJSON結果を適切に解析するにはどうすればよいですか?MVC3のJSON結果は定義されていません

彼らは

$.ajax({ 
     type: "POST", 
     url: "../Controller/GetImageDetails", 
     data: "id=" + id, 
     dataType: "json", 
     success: function (data) { 
      $.map(data, function (item) { 
       $('#tblImages > tbody > tr:first').before("<tr><td>ID:" + item.ID + "</td><td><img src='" + item.ThumbURL + "' alt='" + item.Name + "'/></td></tr>"); 
      }); 
     }, 
     error: function (obj) { 

     } 
    }) 

結果を返したら、これはMVC3アクションメソッド

[HttpPost] 
    [Authorize] 
    public JsonResult GetImageDetails(int id) 
    { 
     Image img = db.Images.First(i => i.ID == id); 
     return Json(img); 
    } 

これは、結果を処理するためにjQueryのですが、未定義が、何もない行です。私は返すオブジェクトのプロパティと同じ数の行を取得するので、JSonの結果を正しく処理していないと確信しています。 JSonの結果をどう扱うかについて、誰かが正しい方向に向けることができますか?また、提案されたアプローチにはブラウザサポートの問題はありますか?前もって感謝します!

+0

'Image'クラスはどのように見えますか?あなたはFirebugで何を見ますか? – SLaks

答えて

1

1つのオブジェクトに$ .mapを使用しようとしているようです。私は、このオブジェクトのプロパティキーを反復処理することになると思います。データオブジェクトのオブジェクトプロパティにアクセスしてみてください。

$.ajax({ 
     type: "POST", 
     url: "../Controller/GetImageDetails", 
     data: "id=" + id, 
     dataType: "json", 
     success: function (data) { 
       $('#tblImages > tbody > tr:first').before("<tr><td>ID:" + data.ID + "</td><td><img src='" + data.ThumbURL + "' alt='" + data.Name + "'/></td></tr>"); 
     }, 
     error: function (obj) { 

     } 
    }) 
+0

それはうまくいった!あなたの男!私はGETへの変更によってもそれが機能するかどうか疑問に思う必要がありますか?これは、ジェシーの提案のおかげで、まだ実施されています。すべてのポインタとベストプラクティスのアイデアは非常に高く評価されています! – likestoski

+0

GetやPOSTはどちらもうまくいくと思います。機密情報や大量の情報がある場合は、郵便で送信する必要があります。たとえば、フォームを送信するにはPOSTを使用する必要があります。エンティティ情報を取得するためにGETがよく使われます。そのような場合には、http:// urlToMyAction?Id = 1のようにURLにいくつかのIdを付けることになります。また、GETタイプのリクエストを行った場合、またはjqueryがGETリクエストで期待されるフォームのURLにタックするのに十分スマートである場合、データプロパティが無視されるかどうかはわかりません。 –

+0

あなたのご意見に感謝します。私はセキュリティ上の意味からゲットとポストの違いに敏感ですが、あなたの絶対的な権利はどちらもうまくいきます。 – likestoski

0

あなたの行動と投稿の対戦を試みましたか?

例:

[HttpGet] 
[Authorize] 
public JsonResult GetImageDetails(int id) 
{ 
    Image img = db.Images.First(i => i.ID == id); 
    return Json(img, JsonRequestBehavior.AllowGet); 
} 
0

あなたの行動から単一の画像を返すが、配列のクライアント側としてそれを扱っています。どうして? dataを調べて、実際にその内容を確認しましたか? 私は驚いていますmap()呼び出しが全く動作します。

また、FYI map()は、指定された配列の要素を変換するためのものです。コールバックから値を返さない場合は、代わりにeach()を使用する必要があります。

+0

map()の代わりに、そのデータをどうやって取得するのですか?私はちょうどdata.IDを行うことができることを期待していたが、それも未定義です。 map()の代わりにeach()を使うと、私には未定義です。 – likestoski

関連する問題