本机JS Ajax将对象发布到ASP.Net为空

时间:2018-09-07 22:00:11

标签: javascript ajax asp.net-mvc

我在JQuery Ajax中有工作代码,但是有人告诉我必须使用本机JS代码才能使用它,而且我对使用本机JS进行Ajax并不十分熟悉,并且大多数Internet示例是基本的。基本上,我有这个对象:

 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;
}

然后,我使用返回的新ID,并将其分配给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";
        }

这将成功接受AJAX发布的JSON,并将其添加到数据库中。现在,当我尝试在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);

“ Narudzba”内部的所有值都是空的,尽管对象在发布到控制器之前显然具有所有正确的值。帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您在Content-Type中缺少xhr request设置。

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

这应该可以解决您的问题。

希望这会有所帮助!