我的JSON对象结果为null,我看不出为什么
问题描述:
所以我一直在网络上寻找一种方法将数据从我的js发送到我的控制器,并遇到了一个看似很好的解决方案。我的JSON对象结果为null,我看不出为什么
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数据时,我可以读取它上面的数据,但将它发送到控制器不起作用。
谢谢!
编辑: 对象IM尝试发送是从事件浏览器方法,看起来像这样
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, [email protected], , ]
0: "DAVE"
1: "DAVID"
2: "[email protected]"
3: ""
4: ""
答
我不知道原来的问题是什么,从来没有真正解决过这个问题,而是使用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();
}
答
您还没有公布确切的格式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
});
}
}
你的意思是这样的吗?
post/get通常期望一个'key = value'名字对提交的数据。你只是发送'value'(json字符串)。 'data:{foo:JSON.stringify(data)}',然后告诉asp代码,你的'lead'在发布数据中的'foo'参数中。 – 2014-10-27 14:14:03
没有工作..我也不认为我可以发送一个JSON到一个方法与字符串[]作为参数。要改变这一点,并与JSON对象一起工作,也许它会工作 – David 2014-10-27 14:17:54