代码之家  ›  专栏  ›  技术社区  ›  Matt Anxo P

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

  •  14
  • Matt Anxo P  · 技术社区  · 15 年前

    一定有什么我错过了。我尝试使用$.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对象,这是成功的。我正试图将其发送到我的控制器以反序列化()。但是正如我所说的,字符串每次都是以null的形式到达的。有什么想法吗?

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

    $.post("/Journal/SaveEntry", { "jsonData": JSONstring });
    
    6 回复  |  直到 12 年前
        1
  •  26
  •   Matt Anxo P    15 年前

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

    public void SaveEntry(string jsonData)
    

    我在JS中发布的操作如下所示:

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

    JSONstring是一个“stringized”(或“serialized”)JSON对象,我使用 JSON plugin

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

    因此,$.post和Controller方法中的变量名必须相同,否则将无法工作。很高兴知道。谢谢你的回答。

        2
  •  5
  •   prodigitalson    15 年前

    最后答覆:

    事实上,确保你正在使用 您的服务器端所使用的右键名称 代码正在查找以及根据 Olek的例子-即,如果你的代码是 寻找变量数据,然后 需要使用数据作为密钥。

    变量名没有对齐。意志 接受它?谢谢麦加马特6小时 以前


    数据参数必须是键值对

    $.post("/Journal/SaveEntry", {"JSONString": JSONstring});
    
        3
  •  2
  •   user186994 user186994    15 年前

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

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

        4
  •  1
  •   Techie    12 年前

    谢谢你回答我的噩梦。

    ..
    .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
    }
    
        5
  •  0
  •   Md. Nazrul Islam    11 年前

    路在这里。

    如果您想指定

    然后用,,

    $('#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");
                    }
                });
    

    如果您没有指定

    $('#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");
                }
            });
    

    如果您想指定

    数据类型:“json”和内容类型:“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.");
                }
            });
    
        6
  •  0
  •   Jakub Loksa    7 年前

    如果你仍然不能让它工作,试试看 你在打电话给警察 $.post

    localhost:61965/Example

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

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