使用jQuery $ .ajax()和$ .post()将字符串数据发送到MVC控制器

必须有一些我想念的东西。 我已经尝试使用$ .ajax()和$ .post()将字符串发送到我的ASP.NET MVC控制器,并且在到达Controller时,字符串在到达时为空。 所以这是我尝试的post方法:

$.post("/Journal/SaveEntry", JSONstring); 

这是我尝试的ajax方法:

 $.ajax({ url: "/Journal/SaveEntry", type: "POST", data: JSONstring }); 

这是我的控制器:

 public void SaveEntry(string data) { string somethingElse = data; } 

对于后台,我使用JSON.stringify()序列化了一个JSON对象,这已经成功了。 我正在尝试将它发送到我的Controller以反序列化()它。 但正如我所说,字符串每次都是空的。 有任何想法吗?

非常感谢。

更新:回答我的问题是我没有使用键/值对作为$ .post()的参数。 所以我尝试了这个,但字符串仍然作为null到达Controller:

 $.post("/Journal/SaveEntry", { "jsonData": JSONstring }); 

回答。 在第一次更新后,我没有正确设置变量名称。 我将Controller中的变量名更改为jsonData,因此我的新Controller头看起来像:

 public void SaveEntry(string jsonData) 

我在JS中的post操作如下:

 $.post("/Journal/SaveEntry", { jsonData: JSONstring }); 

JSONstring是一个“字符串化”(或“序列化”)JSON对象,我使用json.org提供的JSON插件进行序列化。 所以:

 JSONstring = JSON.stringify(journalEntry); // journalEntry is my JSON object 

因此$ .post和Controller方法中的变量名称必须是同一个名称,否则什么都不会起作用。 很高兴知道。 谢谢你的回答。

最终答案:

似乎变量名称没有排在他的post中,正如我在整理数据格式问题后在评论中建议的那样(假设这也是一个问题。

实际上,请确保使用服务器端代码正在查找的正确密钥名称以及Olek的示例 – 即。 如果您的代码正在寻找可变数据,那么您需要使用数据作为密钥。 – prodigitalson 6小时前

@prodigitalson,有效。 变量名称没有排队。 你会发贴第二个答案,我可以接受吗? 谢谢。 – Mega Matt 6小时前

所以他需要使用一个键/值对,并确保他从服务器端的请求中获取正确的变量。


data参数必须是键值对

 $.post("/Journal/SaveEntry", {"JSONString": JSONstring}); 

似乎错过了dataType。 您也可以设置contentType以防万一。 你会试试这个版本吗?

 $.ajax({ url: '/Journal/SaveEntry', type: 'POST', data: JSONstring, dataType: 'json', contentType: 'application/json; charset=utf-8' }); 

干杯。

谢谢你的回答解决了我的噩梦。

我的网格

 .. .Selectable() .ClientEvents(events => events.OnRowSelected("onRowSelected")) .Render();  

我的控制器

 public ActionResult GridSelectionCommand(string id) { //Here i do what ever i need to do } 

方式就在这里。

如果要指定

dataType:’json’

然后使用,

 $('#ddlIssueType').change(function () { var dataResponse = { itemTypeId: $('#ddlItemType').val(), transactionType: this.value }; $.ajax({ type: 'POST', url: '@Url.Action("StoreLocationList", "../InventoryDailyTransaction")', data: { 'itemTypeId': $('#ddlItemType').val(), 'transactionType': this.value }, dataType: 'json', cache: false, success: function (data) { $('#ddlStoreLocation').get(0).options.length = 0; $('#ddlStoreLocation').get(0).options[0] = new Option('--Select--', ''); $.map(data, function (item) { $('#ddlStoreLocation').get(0).options[$('#ddlStoreLocation').get(0).options.length] = new Option(item.Display, item.Value); }); }, error: function () { alert("Connection Failed. Please Try Again"); } }); 

如果你没有指定

dataType:’json’

然后用

 $('#ddlItemType').change(function () { $.ajax({ type: 'POST', url: '@Url.Action("IssueTypeList", "SalesDept")', data: { itemTypeId: this.value }, cache: false, success: function (data) { $('#ddlIssueType').get(0).options.length = 0; $('#ddlIssueType').get(0).options[0] = new Option('--Select--', ''); $.map(data, function (item) { $('#ddlIssueType').get(0).options[$('#ddlIssueType').get(0).options.length] = new Option(item.Display, item.Value); }); }, error: function () { alert("Connection Failed. Please Try Again"); } }); 

如果要指定

dataType:’json’和contentType:’application / json; 字符集= UTF-8′

然后使用

 $.ajax({ type: 'POST', url: '@Url.Action("LoadAvailableSerialForItem", "../InventoryDailyTransaction")', data: "{'itemCode':'" + itemCode + "','storeLocation':'" + storeLocation + "'}", contentType: "application/json; charset=utf-8", dataType: 'json', cache: false, success: function (data) { $('#ddlAvailAbleItemSerials').get(0).options.length = 0; $('#ddlAvailAbleItemSerials').get(0).options[0] = new Option('--Select--', ''); $.map(data, function (item) { $('#ddlAvailAbleItemSerials').get(0).options[$('#ddlAvailAbleItemSerials').get(0).options.length] = new Option(item.Display, item.Value); }); }, error: function () { alert("Connection Failed. Please Try Again."); } }); 

如果仍然无法使其工作,请尝试检查您从中调用$.post 的页面URL

在我的情况下,我从localhost:61965/Example调用此方法localhost:61965/Example ,我的代码是:

 $.post('Api/Example/New', { jsonData: jsonData }); 

Firefox将此请求发送到localhost:61965/Example /Api/Example/New ,这就是我的请求不起作用的原因。