繁体   English   中英

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

[英]Native JS Ajax posted Object to ASP.Net is null

我已经在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内部的所有对象,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”内部的所有值均为空。 帮助将不胜感激。

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

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

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

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM