2014-10-27 113 views
0

所以我一直在網絡上尋找一種方法將數據從我的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: "" 
+0

post/get通常期望一個'key = value'名字對提交的數據。你只是發送'value'(json字符串)。 'data:{foo:JSON.stringify(data)}',然後告訴asp代碼,你的'lead'在發佈數據中的'foo'參數中。 – 2014-10-27 14:14:03

+0

沒有工作..我也不認爲我可以發送一個JSON到一個方法與字符串[]作爲參數。要改變這一點,並與JSON對象一起工作,也許它會工作 – David 2014-10-27 14:17:54

回答

0

我不知道原來的問題是什麼,從來沒有真正解決過這個問題,而是使用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(); 
} 
0

您還沒有公佈確切的格式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 
     }); 
    } 
} 

你的意思是這樣的嗎?

+0

我並不真正理解你的意思..對不起,你能詳細說明一下嗎? – David 2014-10-27 14:30:29

+0

這個問題是關於你的數據格式沒有正確地轉換成你的'string []'類型,但是你不會發布你的'data'對象實際是什麼。在發送給服務器之前,請更新您的問題以顯示您的對象的樣子 – DLeh 2014-10-27 14:31:24

+0

您的意思是放置線索:leadsStrings? – 2014-10-27 14:32:28