получить объект JSON, используя jquery с вызовом ajax из контроллера для просмотра - PullRequest
0 голосов
/ 09 февраля 2019

Я уже несколько часов пытаюсь найти решение, как вернуть объект JSON:

Это моя функция в совокупности со всем, что я пробовал:

$(document).ready(function () {
    $(".nav-link").click(function () {
        var chairChosen = $(this).attr("data-id");
        var perfDateId = $("#perfDate").attr("id");
        var totalCost = $("#totalMoney").html();
        window.alert(perfDateId);
        $.ajax({
            url: '/Booking/ReserveSeat1/?id=' + chairChosen + '&perfDateId=' + perfDateId,
            type: 'GET',
            dataType: 'json',
            success: function (data1) {

                $("#test").append(typeof data1);
                $("#test").append(" notConverted" + data1.Number);
                $("#test").append(" notConverted" + data1["Number"]);
                var result1 = jQuery.parseJSON(data1);
                $("#test").append("Converted jquery" + result1.Number);
                $("#test").append("Converted jquery" + result1["Number"]);
                var result2 = JSON.stringify(data1);
                var object1 = data1;
                $("#test").append("get object " + object1.Number)
                $("#test").append("Converted parse" + result2.Number);
                $("#test").append("Converted parse" + result2["Number"]);
            },
            error: function (error) {
                $(that).remove();
                DisplayError(error.statusText);
            }
        });

    });

});

Я хочу упомянуть данные. Я не хочу отправлять данные JSON, я только ожидаю их получения.

Следующий код находится в моем контроллере:

[HttpGet]
    public ActionResult ReserveSeat1(int id, int perfDateId)
    {

        BookSeatResult bookSeat = new BookSeatResult()
        {
            Number = 10,
            Result = "a string"
        };

        return Json(bookSeat);
    }

также попытался вернутьответ JSON от контроллера.

это веб-приложение mvc в ядре asp.net.

Не забывайте упомянуть, что когда я выполняю вызов, контроллер отвечает, и он возвращает объекттип

Ответы [ 3 ]

0 голосов
/ 09 февраля 2019

Спасибо за участие, потратив некоторое время с вашими предложениями, мне удалось найти способ обойти:

newObj.Add(bookSeat.Number.ToString());
        newObj.Add(bookSeat.Result);

        return Json(newObj.ToArray());

Сейчас я возвращаю массив и получаю к нему доступ следующим образом:

  $("#test").append(data1[1]);

Кроме того, я проанализировал данные, которые принимаются обратно, поэтому я сделал следующее:

$("#test").append(data1["result"]);

и теперь я получаю ожидаемую строку

0 голосов
/ 11 февраля 2019

Для объекта Json он чувствителен к регистру, что означает, что data1.Number и data1.number различны.

Для сериализации Asp.Net Core его сериализатором по умолчанию является camelCase, что означает, что return Json(bookSeat); вернет строку json, как показано ниже:

{"number":10,"result":"a string"}

Для этой строки, если вам нужен доступ к number и result, вам нужно использовать number вместо Number.

Попробуйте

$("#test").append(data1.number);
$("#test").append(data1.result);

Если вы хотите использовать data1.Number, вам нужно изменить ядро ​​asp.net, чтобы оно возвращало PascalCase с настройкой ниже в Startup.cs

services.AddMvc()
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver())
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
0 голосов
/ 09 февраля 2019

Либо удалите атрибут HttpGet из метода, либо измените его на HttpPost, а затем выполните AJAX POST:

$.ajax({
  url: '/Booking/ReserveSeat1/?id=' + chairChosen + '&perfDateId=' + perfDateId,
  type: 'POST',
  dataType: 'json',
  success: function (data1) {

  }

//...
...