Как вернуть JSON и пройтись по возвращенному json в jQuery в приложении MVC? - PullRequest
4 голосов
/ 10 мая 2011

У меня есть контроллер MVC, который возвращает JSON. Я хочу прочитать / получить этот JSON с помощью jQuery и пройтись по элементам / строкам json.

В основном я читаю кучу комментариев, а затем показываю комментарии по одному.

У кого-нибудь есть пример кода для этого?

Я правильно понял JSON. Смотрите возвращенные данные ниже.

    $.ajax(
    {
        type: "GET",
        url: "/comment/GetComments",
        dataType: "json",
        data: "blog_id=100&page_size=5&page_no=1",
        success: function (result) {
            //loop the data.. how do I loop json?
        },
        error: function (req, status, error) {
            alert('Error getting comments');
        }
    });

    My controller:

    [HttpGet]
    public ActionResult GetComments(string blog_id, int page_size, int page_no)
    {            
        try
        {                
            List<Comment> comments = ReadCommentsFromDB();

            if(comments .Count > 0)                
                return Json(new { comments = cmts.ToJson() }, JsonRequestBehavior.AllowGet);
            else
                return Json(new { comments = "none" },, JsonRequestBehavior.AllowGet);
        }
        catch (Exception ex)
        {
            return Json(new { comments = ex.ToString() }, JsonRequestBehavior.AllowGet);
        }
    }

Спасибо

EDIT:

Как зациклить эти json, возвращаемые контроллером? Мне нужно сделать цикл 3 раза, а затем для каждой строки мне нужен доступ ко всем ключам и значениям в этом ряду.

[{ "_id" : { "$oid" : "4dc8" }, "eid" : { "$oid" : "4da" }, "user" : "bob", "text" : "First comment!!", "dt" : { "$date" : 1304966277978 } }, 
 { "_id" : { "$oid" : "4dc8" }, "eid" : { "$oid" : "4da" }, "user" : "bob", "text" : "Second comment!!", "dt" : { "$date" : 1304966347677 } }, 
 { "_id" : { "$oid" : "4dc8" }, "eid" : { "$oid" : "4da" }, "user" : "bob", "text" : "Third comment!!", "dt" : { "$date" : 1304966493240 } }
]

Ответы [ 4 ]

4 голосов
/ 10 мая 2011
success: function(result) {
    $.each(result["comments"], function(key, value) {
        // loop
    });
}

Ваш результат должен быть объектом json

{
    "comments": ...
}

Что касается попытки получить ошибку:

type: "GET",
url: "/comment/GetComments?blog_id=100&page_size=5&page_no=1",
dataType: "json",
//data: "blog_id=100&page_size=5&page_no=1",
3 голосов
/ 10 мая 2011
$.ajax(
    {
        type: "GET",
        url: "/comment/GetComments",
        dataType: "json",
        data: "blog_id=100&page_size=5&page_no=1",
        success: function (result) {
            jQuery.each(result['comments'], function(key,val){
               // do stuff :)
            });
        },
        error: function (req, status, error) {
            alert('Error getting comments');
        }
    });
2 голосов
/ 10 мая 2011

Ответ на вашу первую проблему - разрешить Json работать в GET.Json обычно работает только на должность.Вы разрешаете Json в GET, используя следующий метод возврата в вашем контроллере (используя один из ваших операторов возврата).

return Json(new { comments = "none" }, JsonRequestBehavior.AllowGet)

Редактировать: Вы также можете вернуть JsonResult вместо ActionResult как показано ниже.

public ActionResult GetComments(string blog_id, int page_size, int page_no)    
{           
    try        
    {
        List<Comment> comments = ReadCommentsFromDB();

        // Assuming that Comments will be an empty list if there are no data
        return Json(comments, JsonRequestBehavior.AllowGet)
    }
    catch (Exception ex)
    {
        return Json(new { comments = ex.ToString() }, JsonRequestBehavior.AllowGet));
    }
}
1 голос
/ 10 мая 2011

Удалите [HttpPost] из метода контроллера, чтобы разрешить получение запросов в сочетании с JsonRequestBehavior.AllowGet

Какую внутреннюю ошибку сервера вы получаете?что это за сообщение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...