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

问题描述 投票:0回答:7

我一定缺少一些东西。我尝试使用 $.ajax() 和 $.post() 将字符串发送到我的 ASP.NET MVC 控制器,当到达控制器时,该字符串到达那里时为空。所以这是我尝试过的 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 对象,并且成功了。我正在尝试将其发送到我的控制器以对其进行反序列化()。但正如我所说,字符串每次到达时都为空。有什么想法吗?

非常感谢。

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

$.post("/Journal/SaveEntry", { "jsonData": JSONstring });
asp.net-mvc jquery controller
7个回答
26
投票

已回答。第一次更新后,我没有正确设置变量名称。我将控制器中的变量名称更改为 jsonData,因此我的新控制器标头如下所示:

public void SaveEntry(string jsonData)

我在 JS 中的后期操作如下所示:

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

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

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

所以 $.post 中的变量名和 Controller 方法中的变量名需要相同,否则不起作用。很高兴知道。感谢您的回答。


5
投票

最终答案:

变量名称似乎没有按照我在解决数据格式问题后在评论中建议的那样在他的帖子中排列(假设这也是一个问题。

实际上,请确保您使用的是 你的服务器端的右键名称 代码正在寻找以及 奥莱克的例子 - 即。如果你的代码是 寻找变量数据然后你 需要使用数据作为你的密钥。 – prodigitalson 6 小时前

@prodigitalson,有效。这 变量名没有对齐。将要 你发布第二个答案,这样我就可以 接受?谢谢。 – 超级马特 6 小时 前

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


数据参数必须是键值对

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

2
投票

似乎缺少数据类型。您也可以设置 contentType 以防万一。你想尝试这个版本吗?

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

干杯。


1
投票

感谢您的回答,解决了我的噩梦。

我的网格

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

<script type="text/javascript">
function onRowSelected(e) {
        id = e.row.cells[0].innerHTML;
        $.post("/<b>MyController</b>/GridSelectionCommand", { "id": id});
    }
</script>

我的控制器

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

0
投票

路就在这里。

如果您要指定

数据类型:'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");
                }
            });

如果您不指定

数据类型:'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.");
            }
        });

0
投票

如果您仍然无法使其工作,请尝试检查您正在调用 $.post

 的页面 URL。

就我而言,我从

localhost:61965/Example

 调用此方法,我的代码是:

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

Firefox 将此请求发送至

localhost:61965/Example

/Api/Example/New
,这就是我的请求不起作用的原因。


0
投票
以此为样本来解决您的问题

document.addEventListener("DOMContentLoaded", function () { // Assuming submitBtn is properly defined submitBtn.addEventListener("click", function () { // Make sure to define toSend with appropriate data var JSONstring = JSON.stringify(toSend); $.post("/Sales/Create", { "jsonData": JSONstring }, function (response) { console.log(JSONstring); // Fix variable name window.location.href = '/Sales/Index'; }, 'json') .fail(function (error) { console.error(error.responseText); // Log the specific error message }); }); });
    
© www.soinside.com 2019 - 2024. All rights reserved.