使用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
,这就是我的请求不起作用的原因。