我的json对象变成null,我可以'我不明白为什么

My json object turns out null and I can't see why

本文关键字:为什么 明白 我可以 对象 json null 我的      更新时间:2023-09-26

所以我一直在网上寻找一种将数据从js发送到控制器的方法,并找到了一个看似不错的解决方案。

function syncDB() {
if (localStorage.length != 0) {
    var data = viewLog();
    for (var i = 0; i < localStorage.length; i++) {
        $.ajax({
            url: "/Leads/RegisterOfflineEntries",
            type: "POST",
            dataType: "json",
            data: JSON.stringify(data)
        });
    }
}

}

这被发送到:

public ActionResult RegisterOfflineEntries(string[] leads)
    {
        string[] splitLeads;
        for (int i = 0; i < leads.Length; i++)
        {
            splitLeads = leads[i].Split(',');
            var validFields = new List<LeadFields>();
            var fields = new List<LeadFields>
            {
                new LeadFields() {Value = splitLeads[0], FieldsId = 1},
                new LeadFields() {Value = splitLeads[1], FieldsId = 2},
                new LeadFields() {Value = splitLeads[2], FieldsId = 3},
                new LeadFields() {Value = splitLeads[3], FieldsId = 4},
                new LeadFields() {Value = splitLeads[4], FieldsId = 5}
            };
            foreach (var v in fields.Where(v => !(string.IsNullOrEmpty(v.Value))))
            {
                v.Value = v.Value.ToUpper();
                validFields.Add(v);
            }
        }
        return RedirectToAction("Index","Home");
    }

现在,不要过多地阅读代码,因为问题在于ActionMethod的参数。它是空的,我不知道为什么,因为当我在其他地方使用js数据时,我可以读取上面的数据,但将其发送到控制器是不起作用的。

谢谢!

编辑:我试图发送的对象是从viewLog方法中提取的,它看起来像这个

function viewLog() {
var localDbList = [localStorage.length];
for (var i = 0; i < localStorage.length; i++) {
    localDbList[i] = localStorage[i];
}
return localDbList;

}

我有一个用于离线支持的localStorage,我正试图将存储在这里的值保存在我的服务器上

编辑:

Request URL:http://localhost:59848/Leads/RegisterOfflineEntries
Request Headers
Provisional headers are shown
Accept:*/*
Content-Type:json
Origin:http://localhost:59848<br>
Referer:http://localhost:59848/Leads/Register
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
X-DevTools-Emulate-Network-Conditions-Client-Id:C8AD858A-EBA0-4A75-8D89-38956182F914
X-Requested-With:XMLHttpRequest
Request Payloadview source
[DAVE, DAVID, HAHA@MAIL.COM, , ]
0: "DAVE"
1: "DAVID"
2: "HAHA@MAIL.COM"
3: ""
4: ""

您还没有发布data的确切格式,在字符串化之前应该是这样的

var leadsStrings = new Array();
leadsStrings.push("string1");
leadsStrings.push("string2"); //etc
var dataObj = {
    leads: leadsStrings
};
data : dataObj 

function syncDB() {
var data = new Array();
if (localStorage.length != 0) {
    for (var i = 0; i < localStorage.length; i++) {
        data.push(localStorage[i]);
    }
    var dataObj = {
        leads: data
    };
        $.ajax({
            url: "/Leads/RegisterOfflineEntries",
            data: dataObj
        });
    }
}

你是这个意思吗?

我不知道最初的问题是什么,从来没有真正用这种方法解决过,而是用API控制器解决了这个问题,这样它就可以在后台顺利地完成任务。如果有人对感兴趣,请在下面编码

function OfflineSync() {
if (localStorage.length != 0) {
    $.post('/api/TrackApi', { '': localStorage.length });
    var formatedList = formatViewLog();
    for (var k = 0; k < formatedList.length; k += 5) {
        var value = JSON.stringify([
            formatedList[k],
            formatedList[k + 1],
            formatedList[k + 2],
            formatedList[k + 3],
            formatedList[k + 4]
        ]);
        $.post('/api/Offline', { '': value });
    }
}
localStorage.clear();
}