Собственный JS Ajax опубликовал объект в ASP.Net является нулевым - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть рабочий код в JQuery Ajax, однако мне сказали, что я должен использовать нативный код JS, чтобы использовать его, и я не очень знаком с использованием нативного JS для ajax, и большинство примеров в Интернете основные. В основном, у меня есть этот объект:

 var Narudzba =
        {
            SifraNarudzbe: "AAA",
            DatumNarudzbe: "",
            Osigurano: document.getElementById("checkOsiguranje").value,
            BrzaDostava: document.getElementById("checkBrza").value,
            KlijentId: document.getElementById("klijentid").value,
            Adresa: AdresaVar,
            StatusNarudzbeID: 2,
            Primaoc: PrimaocVar,
            VrijemeIsporuke: null,
            CijenaNarudzbe: UkupnaCijena,
            NacinPlacanja: parseInt(document.getElementById("NacinPlacanja_Select").value)
        };

Который я пытаюсь опубликовать на моем контроллере. Вот как выглядит мой рабочий код в Jquery Ajax:

$.ajax({
    url: "/klijentarea/klijent/SnimiNarudzbu",
    data: Narudzba,
    type: 'POST',
    success: function (data) {
        for (var i = 0; i < stavke_niz.length; i++) {
            stavke_niz[i].NarudzbeId = parseInt(data);
        }
        stavke_niz = JSON.stringify(stavke_niz);
        $.ajax({
            url: "/klijentarea/klijent/SnimiStavke",
            type: "POST",
            dataType: "json",
            data: stavke_niz,
            contentType: 'application/json',
            success: function (data) {
                if (data === true) {
                    var id = document.getElementById("klijentid").value;
                    window.location.href = '/KlijentArea/Klijent?id=' + id;
                }
            }
        });
    }

});

По сути, он создает заказ (Narudzba) со всеми видами деталей, отправляет его на этот контроллер:

[HttpPost]
public int SnimiNarudzbu(Narudzbe Narudzba)
{
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    var stringChars = new char[8];
    var random = new Random();

    for (int i = 0; i < stringChars.Length; i++)
    {
        stringChars[i] = chars[random.Next(chars.Length)];
    }

    var finalString = new String(stringChars);

    Narudzba.SifraNarudzbe = finalString;
    Narudzba.DatumNarudzbe = DateTime.Now;
    ctx.Primaoci.Add(Narudzba.Primaoc);
    ctx.Naruzbee.Add(Narudzba);
    ctx.SaveChanges();
    int newid = Narudzba.Id;
    return newid;
}

Затем я использую возвращенный новый идентификатор и назначаю его всем объектам внутри stavke_niz, который представляет собой массив списков заказов, который создается в другом месте кода, и требует OrderID перед добавлением в базу данных (я могу добавить этот код а также при необходимости). Затем массив с обновленными идентификаторами OrderID будет отправлен на этот контроллер:

 [HttpPost]
        public string SnimiStavke(IEnumerable<StavkaNarudzbe> stavke_niz)
        {          
            if (stavke_niz != null)
            {
                ctx.StavkeNarudzbi.AddRange(stavke_niz);
                ctx.SaveChanges();
                return "true";
            }
            return "false";
        }

Который успешно принимает JSON, опубликованный с AJAX, и добавляет материал в базу данных. Теперь, когда я пытаюсь опубликовать в Native, примерно так:

var xhr = new XMLHttpRequest();
xhr.onload = function () {
    if (xhr.status === 200 && this.readyState === 4)
    {
        alert(this.getAllResponseHeaders());
    }
};
xhr.open('POST', '/klijentarea/klijent/SnimiNarudzbu', true);
xhr.send(Narudzba);

Все значения внутри «Нарудзба» равны нулю, несмотря на то, что объект явно имеет все правильные значения перед отправкой в ​​контроллер. Помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 08 сентября 2018

Вам не хватает настройки Content-Type в вашем xhr request.

xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");

Это должно решить вашу проблему.

Надеюсь, это поможет!

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