Json не удалось выполнить синтаксический анализ по запросу поста ajax - PullRequest
2 голосов
/ 13 июня 2019

У меня есть ajax-запрос, он получает строку из поля ввода и отправляет ее на сервер, ожидая получения коллекции объектов. Я должен получить коллекцию Заметок, в которой заметка имеет объект Журнал, объект Категория, объект Пользователь, однако, если я удаляю их, а не включаю их, синтаксический анализ работает правильно.

Способ получения коллекции:

public ICollection<NoteViewModel> SearchByTextAsync(string text)
        {
            var notes = this.dbContext.Notes
                //.Include(l => l.Logbook)
                //    .ThenInclude(x => x.LogbookManagers)
                //.Include(x => x.Logbook)
                //    .ThenInclude(s => s.Business)
                //.Include(c => c.Category)
                //.Include(u => u.User)
                .Where(n => n.Text.Contains(text))
                .ToList();

            var mappedNotes = this.mappingProvider.MapTo<ICollection<NoteViewModel>>(notes);
            return mappedNotes;
        }

Если я просто удаляю четыре включаемых файла, синтаксический анализ работает нормально! Как я могу получить коллекцию с включенными объектами?

Ajax call

$("#target").keyup(function (event) {
    var request = $.ajax({
        url: "/Management/Management/GetNotesAsyncJson",
        type: "POST",
        data: { "data": event.target.value },
        dataType: 'json'
    });

    request.done(function (data) {
        $.each(data, function (index) {
            var textToPrepend =
                "<div class='pricing-option' id='idPlace'>" +
                "<i class='material-icons'> mode_comment</i>" +
                "<h1 class='note-title' id='titlePlace'>admin@admin.admin</h1>" +
                "<hr />" +
                "<p id='textPlace'>" + data[index].text + "</p>" +
                "<hr />" +
                "<p id='priorityPlace'>" + data[index].prioritytype + "</p>" +
                "<hr />" +
                "<div class='price'>" +
                "<div class='front'>" +
                "<span class='note-title'>@Model.Category?.Name </span>" +
                "</div>" +
                "<div class='back'>" +
                "<i class='material-icons' id='editNote' data-Id='@Model.Id'>edit</i>" +
                "<i class='material-icons' id='deleteNote' data-Id='@Model.Id'>remove_circle</i>" +
                "<i class='material-icons' id='archiveNote'>archive</i>" +
                "</div>" +
                "</div>" +
                "</div>";

            $('.pricing-table').prepend(textToPrepend)
        });
    })
    request.fail(function (data) {
        console.log(data);
        console.log(data.responseText)
    })
});

Контроллер


public JsonResult GetNotesAsyncJson(string data)
        {
            var notes = this.noteService.SearchByTextAsync(data);
            var model = new SearchViewModel();
            model.Notes = notes;

            return Json(model.Notes);
        }

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Решение: Json находился в цикле самоссылки и не мог разобрать свойства. Я решил это, добавив [JsonIgnore] к свойствам, вызывающим это.

1 голос
/ 13 июня 2019

В вашем контроллере

[HttpPost({data})] 
public JsonResult GetNotesAsyncJson(string data)
{
  var notes = this.noteService.SearchByTextAsync(data);
  var model = new SearchViewModel();
  model.Notes = notes;

  return Json(model.Notes);
}

Если это не работает, попробуйте использовать JSON.stringify в вашем коде ajax как-то так:

$("#performActionButton").click(function (event) {
        var data = { data: event.target.value };
        $.ajax({
            url: '/url',
            data: data,
            type: 'POST',
            traditional: true,
            contentType: 'application/json; charset=utf-8',
            success: function (data) {

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