#jquery #json #asp.net-mvc-3
#jquery #json #asp.net-mvc-3
Вопрос:
Я пытаюсь получить результаты JSON из действия MVC3 и поместить их в строку таблицы, но все значения не определены. Как я могу правильно проанализировать результаты JSON из запроса jQuery ajax?
Это метод действия MVC3
[HttpPost]
[Authorize]
public JsonResult GetImageDetails(int id)
{
Image img = db.Images.First(i => i.ID == id);
return Json(img);
}
Это jQuery для обработки результатов после их возврата
$.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) {
}
})
Результатом являются строки, в которых нет ничего, кроме undefined. Я получаю столько же строк, сколько и свойств в объекте, который я возвращаю, поэтому я уверен, что я просто неправильно обрабатываю этот результат JSon. Может кто-нибудь указать мне правильное направление в том, как обрабатывать этот результат JSon, пожалуйста? Также существуют ли какие-либо проблемы с поддержкой браузера при предлагаемом подходе? Заранее спасибо!
Комментарии:
1. Как выглядит ваш
Image
класс? Что вы видите в Firebug?
Ответ №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) {
}
})
Комментарии:
1. Это сработало! Ваш человек! Я должен задаться вопросом, хотя, если изменение GET также заставило его работать? Это также все еще действует благодаря предложению Джесси. Любые рекомендации и идеи наилучшей практики будут высоко оценены!
2. Я думаю, что Get или POST будут работать и то, и другое. Если у вас есть конфиденциальная информация или большой объем информации, вы должны отправить ее по почте. Отправка формы, например, должна быть POST. GET часто используется для получения информации о сущностях. В подобных случаях вы бы дали ему некоторый идентификатор прямо в URL, например urlToMyAction?Id= 1 . Кроме того, я не уверен, будет ли свойство data проигнорировано, если вы выполнили запрос типа GET, или если jquery достаточно умен, чтобы привязать его к URL-адресу в форме, ожидаемой с запросом GET
3. Я ценю ваш вклад. Я чувствителен к различиям между get и post из-за последствий для безопасности, но вы абсолютно правы, что они оба работают.
Ответ №2:
Вы пробовали выполнять get для своего действия по сравнению с post?
например:
[HttpGet]
[Authorize]
public JsonResult GetImageDetails(int id)
{
Image img = db.Images.First(i => i.ID == id);
return Json(img, JsonRequestBehavior.AllowGet);
}
Ответ №3:
Вы возвращаете одно изображение из своего действия, но обрабатываете его как массив на стороне клиента. Почему? Вы пытались изучить data
и посмотреть, что в нем на самом деле? Я удивлен map()
, что вызов вообще работает.
Также, к вашему сведению map()
, предназначен для преобразования элементов данного массива. Если вы не возвращаете значение из своего обратного вызова, тогда вы должны использовать each()
вместо этого.
Комментарии:
1. Вместо map() как мне получить эти данные вместо этого? Я надеялся, что смогу просто сделать данные. Например, идентификатор, но он также не определен. each() вместо map() также дает мне просто undefined .