【问题标题】:jQuery AJAX not sending datajQuery AJAX 不发送数据
【发布时间】:2018-06-11 12:18:28
【问题描述】:

这是我的 jQuery / JS 代码:

var selectedMonths = [];
var selectedLocations = [];
var selectedEvents = [];

$("#filter").click(function ()
{
    $('#months li').each(function ()
    {
        if ($(this).find('input[type=checkbox]').is(':checked'))
        {
            selectedMonths.push($(this).find('a').attr('data-value'));
        }
    });

    $('#locations li').each(function () {
        if ($(this).find('input[type=checkbox]').is(':checked')) {
            selectedLocations.push($(this).find('a').attr('data-value'));
        }
    });

    $('#events li').each(function () {
        if ($(this).find('input[type=checkbox]').is(':checked')) {
            selectedEvents.push($(this).find('a').attr('data-value'));
        }
    });

    var months = { months: selectedMonths };

    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: 'POST',
        url: '/Shop/FilterRinglet',
        data: months,
        traditional: true,
        success: function (result) {
            alert("success");
        },
        failure: function (response) {
            alert(response);
        }
    });
});

这是我的简单控制器:

[HttpPost]
public ActionResult FilterRinglet(List<string> months)
{
    return Json(new { x = "sdg", received = "ok" });
}

但 Chrome DevTools 只显示 500 - Internal Server Error。

我想向该控制器发送三个字符串数组(例如,您只看到发送一个的尝试)。

我试过这个(How can I post an array of string to ASP.NET MVC Controller without a form?),可能还有其他答案。我不能让它工作,你能告诉我我的错误隐藏在哪里吗?

编辑: 我还尝试了以下代码行

var months = JSON.stringify({ months: selectedMonths });

selectedMonths 看起来像这样

这不会导致 500,但在控制器中它看起来像这样:

编辑2: 我也试过这个:

        $.post('/Shop/FilterRinglet', { 'months[]': selectedMonths }, function (response) {
            alert(response);
        });

但是除了"" 之外什么都没有到达控制器。

编辑3:

我变了

[HttpPost]
public ActionResult FilterRinglet(List<string> months)

[HttpPost]
public ActionResult FilterRinglet(string[] months)

但还是没有成功。

编辑4:

我还创建了一个类

public class RingletData
{
    public List<string> months { get; set; }
}

并相应地更改了方法。月仍然是""

【问题讨论】:

    标签: jquery asp.net-ajax


    【解决方案1】:

    因此,经过数小时的研究并结合不同的方法,我想出了以下解决方案:

    // old line, needs to be changed: var months = { months: selectedMonths };
    // new line, already contains the other arrays:
    var data = JSON.stringify({ months: selectedMonths, locations: selectedLocations, events: selectedEvents });
    
    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: 'POST',
        url: '/Shop/FilterRinglet',
        data: data,
        traditional: true,
        success: function (result) {
            alert("success");
        },
        failure: function (response) {
            alert(response);
        }
    });
    

    控制器:

        [HttpPost]
        public ActionResult FilterRinglet(RingletData data)
        {
            ...
        }
    

    重要的是,如果您使用JSON.stringify(...),请不要忘记contentType: "application/json"。这是我的错误,因为在我不同的试验和错误中我忘记使用它 - 但我不知道在使用 JSON.stringify(...) 时有必要使用它

    您还应该创建一个对象,例如 RingletData 在我的例子中:

    public class RingletData
    {
        public string[] months { get; set; }
        public string[] locations { get; set; }
        public string[] events { get; set; }
    }
    

    然后可以使用data.months 访问您发送的数据。

    【讨论】:

      【解决方案2】:

      您是否尝试过使用 JSON.stringify 并将传统设置为 false。我不相信它们一起工作。

      (我会将此作为评论,但我没有足够的代表)。

      【讨论】:

        猜你喜欢
        • 2020-09-19
        • 1970-01-01
        • 2012-10-01
        • 2014-10-10
        • 2014-04-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-20
        • 1970-01-01
        相关资源
        最近更新 更多